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 次 |
最近记录: |