Nyx*_*nyx 3 node.js npm meteor node-fibers meteorite
我正在使用Meteor.require('npmPackage')NPM包.但是,在npm包的回调函数中写入mongo时,我似乎遇到了错误.
错误:
Error: Meteor code must always run within a Fiber. Try wrapping callbacks that you pass to non-Meteor libraries with Meteor.bindEnvironment.
码
npmPackage.getInfo(function(err, data) {
UserSession.insert({
key: 'info',
value: data
});
console.log(data);
});
Run Code Online (Sandbox Code Playgroud)
我尝试在Fiber中包装代码,但仍显示相同的错误消息:
Fiber(function() {
npmPackage.getInfo(function(err, data) {
UserSession.insert({
key: 'info',
value: data
});
console.log(data);
});
}).run();
Run Code Online (Sandbox Code Playgroud)
问题:如何Meteor.bindEnvironment使用它来实现这个目的?
尝试使用wrapAsync例如
npmPackage.getInfoSync = Meteor._wrapAsync(npmPackage.getInfo.bind(npmPackage));
var data = npmPackage.getInfoSync();
UserSession.insert({
key: 'info',
value: data
});
Run Code Online (Sandbox Code Playgroud)
您可以根据需要添加参数npmPackage.getInfoSync()(如果需要).
问题是回调需要在光纤中,而错误来自于光纤.最好的方法是使用Meteor.bindEnvironment.Meteor._wrapAsync为你做这件事并使代码同步.哪个更好:)
Meteor._wrapAsync是一个未记录的方法,它接受一个方法,其最后一个参数是第一个参数的回调,第二个参数error是result.就像你的回调一样.
然后它将回调包装成a Meteor.bindEnvironment并等待它然后同步返回值.
| 归档时间: |
|
| 查看次数: |
2387 次 |
| 最近记录: |