包装集合.插入



我在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.bindEnviorment 包装传递给非 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();
}  
});

最新更新