Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 包装集合.insert_Javascript_Meteor - Fatal编程技术网

Javascript 包装集合.insert

Javascript 包装集合.insert,javascript,meteor,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>' });

我在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的答案添加到集合中

但这会返回错误:

错误:Meteor代码必须始终在光纤中运行。尝试使用Meteor.bindEnviroment包装传递给非Meteor库的回调


这是由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();
  }  
});

这个答案可能有帮助@mparkitny,试过Meteor.wrapAsync,仍然是相同的错误。