我正在使用NPM OAuth库,因为我无法让Meteor工作。我收到这个错误。
错误:Meteor代码必须始终在光纤内运行。尝试使用Meteor.bindEnvironment包装传递给非Meteor库的回调。
如果我删除Collection.upsert行,它会起作用。
var OAuth = Meteor.require('oauth').OAuth;
var oa = new OAuth(null, null, consumer_key, consumer_secret, "1.0", null, "HMAC-SHA1");
var request = oa.post("https://stream.api.com/blah.json", access_token, access_secret);
request.on('response', function (response) {
response.setEncoding('utf8');
response.on('data', function(data) {
var j = JSON.parse(data)
Collection.upsert({symbol: j.symbol}, {last: j.last})
})
});
request.end();
我已经阅读过有关Meteor.bindEnvironment和Meteor._wrapAsync但无法使其正常工作的信息。
答案 0 :(得分:4)
Collection.upsert
方法在嵌入光纤时有效,而request.on
的回调被任意调用,而不是用一个回调。试试这个:
request.on('response', function (response) {
new Fiber(function(){
response.setEncoding('utf8');
response.on('data', function(data) {
var j = JSON.parse(data)
Collection.upsert({symbol: j.symbol}, {last: j.last})
});
}).run();
});