我刚刚花了几个小时阅读 SO 的答案,例如Meteor: Calling an asynchronous function inside a Meteor.method and return the result
不幸的是,我仍然没有设法使用光纤或期货。
我正在尝试做一些相当简单的事情(我认为!)。
创建用户时,根据异步方法的结果向用户对象添加一个变量。所以想象一下,如果你会在名为 BANK 的第 3 方数据库服务器上调用我的异步方法,这可能需要几秒钟才能返回。
Accounts.onCreateUser(function(options,user){
var Fiber = Npm.require("fibers");
Fiber(function() {
BANK.getBalance(function(err, theBalance) {
if (err) return console.log(err);
_.extend(user,{
balance: theBalance;
});
});
}).run();
return user;
});
所以上面发生的事情是调用了 BANK 方法,但是当它返回时,代码已经继续前进,并且永远不会调用 _.extend。
我尝试将返回调用放在 Fiber 中,这只会让事情变得更糟:它永远不会返回用户。确实如此,但为时已晚 3 秒,所以到那时下游的一切都在救助。
感谢您的任何帮助!