在Meteor.js中使用NPM包时必须在光纤错误内运行

时间:2013-12-05 17:03:55

标签: meteor

我正在使用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但无法使其正常工作的信息。

1 个答案:

答案 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();
});