0

通过 websockets 接收 JSON 数据时,我试图将这些数据输入到流星中的 mongodb 中。我得到的 JSON 数据很好,但是当试图查找数据库中是否已经存在数据时,我不断收到错误消息:“['Parse error: Can\'t wait without a fiber']'。

binance.websockets.miniTicker(markets => {
      //we've got the live information from binance
      if (db.Coins.find({}).count() === 0) {
        //if there's nothing in the database right now
        markets.forEach(function(coin) {
          //for each coin in the JSON file, create a new document
          db.Coins.insert(coin);
        });
      }
    });

谁能指出我正确的方向来解决这个问题?

非常感谢,鲁弗斯

4

1 回答 1

0

您在异步函数的回调中执行 mongo 操作。此回调不再绑定到正在运行的光纤。为了将回调连接到纤程,您需要使用Meteor.bindEnvironment将纤程绑定到回调的光纤。

binance.websockets.miniTicker(Meteor.bindEnvironment((markets) => {
  //we've got the live information from binance
  if (db.Coins.find({}).count() === 0) {
    //if there's nothing in the database right now
    markets.forEach(function(coin) {
      //for each coin in the JSON file, create a new document
      db.Coins.insert(coin);
    });
  }
}));

您不应该要求绑定到其中的函数,forEach因为它们不是异步的。

SO上的相关帖子:

Meteor.Collection 与 Meteor.bindEnvironment

Meteor:在 Meteor.method 中调用异步函数并返回结果

没有标准回调签名的 Meteor wrapAsync 或 bindEnvironment

Meteor 和 Fibers/bindEnvironment() 是怎么回事?

于 2018-04-13T07:31:22.297 回答