问题描述
我将 gRPC
与 NodeJs
一起使用,我想要的响应是这样的(JS 格式的示例):
[
['aa1',0],['aa2',...
['aaN',]
这里的问题是我没有看到在没有键/值字段的对象中返回列表的示例,所以我不知道如何创建 .proto
文件。
现在我有这样的事情:
message Response{
repeated ResponseData data = 1;
}
message ResponseData {
repeated string field1 = 1;
repeated uint32 field2 = 2;
repeated uint32 field3 = 3;
}
client.getData(request,{},(err,response)=> {
var result = response.getDataList();
// ^^^^^^^ here I want to get the matrix
}
我也试过:
var result = response.getDataList();
result.forEach(element => {
console.log("element 1 = ",element.getField1List())
console.log("element 2 = ",element.getField2list())
console.log("element 3 = ",element.getField3List())
})
但是从 element.getFieldXList()
返回的数组是空的。
也是从服务器我发送这个测试矩阵:
[["0",["1",1,1],["2",2,2],["3",3,3]]
感谢任何帮助。
提前致谢。
编辑:
使用 console.log(JSON.stringify(result))
的输出是:
[{"wrappers_":null,"arrayIndexOffset_":-1,"array":[[],[],[]],"pivot_":1.7976931348623157e+308,"convertedPrimitiveFields_":{}},{"wrappers_":null,"convertedPrimitiveFields_":{}}]
解决方法
问题中的 protobuf 消息定义描述了一个对象,该对象包含一个对象列表,每个对象都有三个字段,每个字段都有一个原始值列表。但是,您说您尝试发送一个列表列表,这是一个非常不同的结构。要发送消息,您需要提供一个具有相同结构的对象。对于提供的消息类型,它看起来像这样:
response = {
data = [
{
field1: ["0"],field2: [0],field3: [0]
},{
field1: ["1"],field2: [1],field3: [1]
},// ...
]
}
如果您想表示更类似于问题中列表的内容,您可能希望 ResponseData
消息的内部字段不是 repeated
。