javascript - 包装 Collection.insert

标签 javascript meteor

我在 Meteor.js“main.js - Server”中有这个方法。

Meteor.methods({
  messageSent: function (message) {
    var apiai = require('apiai');

    var app = apiai("TOKEN");
    var request = app.textRequest(message, {
      sessionId: '<unique session id>'
    });

    request.on('response', function(response) {
      console.log(response);
      console.log(response.result.fulfillment.speech);
      Meteor.wrapAsync(gateway.transaction.sale);
      Messages.insert({
        message: response.result.fulfillment.speech,
        timestamp: new Date(),
        username: 'gotoAndBot'
      });
    });

    request.on('error', function(error) {
      console.log(error);
    });

    request.end();
  }  
});

从 api.ai 获取答案并尝试将 api.ai 的答案添加到集合中。

但这会返回错误:

ERROR: Meteor code must always run within a Fiber. Try wrapping callbacks that you pass to non-Meteor libraries with Meteor.bindEnviorment.

这是由 Messages.insert 行引起的。

最佳答案

正如评论中已经建议的,答案是将回调包装在 Meteor.bindEnvironment 中,以便它在附加了所有必要变量的纤程中运行。所以你的代码将是:

Meteor.methods({
  messageSent: function (message) {
    var apiai = require('apiai');

    var app = apiai("TOKEN");
    var request = app.textRequest(message, {
      sessionId: '<unique session id>'
    });

    request.on('response', Meteor.bindEnvironment(function(response) {
      Messages.insert({
        message: response.result.fulfillment.speech,
        timestamp: new Date(),
        username: 'gotoAndBot'
      });
    }));

    request.on('error', function(error) {
      console.log(error);
    });

    request.end();
  }  
});

关于javascript - 包装 Collection.insert,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45241143/

相关文章:

javascript - JQuery Ajax 不向 PHP 发送数据

meteor - `npm install` 是否与 Meteor 1.3 中的 `meteor npm install` 相同?

javascript - Electron react 构建未启动

javascript - 需要帮助让 Prop 使用 react 工作

javascript - 使用 typeScript 转换日期对象属性数组

mongodb - 意外的 mongo 退出代码 100。正在重新启动

meteor - 如何在 View 中显示 Meteor.user() 配置文件数据

ios - Html5 音频播放器不会在使用 meteor 的 iOS 应用程序中显示

javascript - 如何从已部署的 Meteor 应用程序的子目录中读取文件?

javascript - 如何在页面重新加载后保持复选框选中状态?