我有包含所有消息定义的 proto 文件。我目前正在开发一个 reactjs 项目,我想在 js 代码中动态使用其中的一些原型模型,为此我正在使用protobufjs库。
我有一个函数,我在其中调用protobuf.load()
以创建在 proto 文件中定义的类型的新对象。该函数的代码如下所示:
function doSomething () {
// This is what I want to return
let result = [];
// Load the proto models and extract necessary info
protobuf.load(protoFile, function(err, root) {
if (err)
throw err;
const someMessageType = root.lookupType("someMessageType");
// res is actually populated here
res = Object.keys(someMessageType.fields);
});
return res;
}
在调用doSomething()
时,结果总是返回一个空数组,因为加载函数是异步执行的(据我所知)。
有没有一种干净的方法可以在返回结果之前完成加载?如果 UI 冻结也没关系,这不是问题。
protobufjs 文档指定了另一种语法
protobuf.load("awesome.proto")
.then(function(root) {
...
});
在尝试这个时,我得到:
Error: illegal token '<' (models.proto, line 1)
在使用 js 时,我是一个新手。在这个问题上的任何帮助都会有很大帮助。提前致谢!