0

我有包含所有消息定义的 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 时,我是一个新手。在这个问题上的任何帮助都会有很大帮助。提前致谢!

4

0 回答 0