以下是我要做的事情:
var joinNetwork = function (obj) {
Meteor.call("joinNetwork", {
userId: obj.userId,
domain: obj.domain
}, function (err, networkId) {
return networkId;
});
}
Accounts.onCreateUser(function (options, user) {
var userId = user._id;
var email = options.email;
var domain = Utils.getDomain(email);
var joinNetworkSync = Meteor.wrapAsync(joinNetwork);
// works fine until here
var networkId = joinNetworkSync({
userId: userId,
domain: domain
});
// never get here
debugger
正如您所看到的,在我致电joinNetworkSync
之后,我从未接触过该代码。换句话说,networkId
永远不可用。我做错了什么?
答案 0 :(得分:1)
要从wrapAsync
返回,您必须调用传递给该函数的回调:
Meteor.wrapAsync(function (obj, done) {
Meteor.call("joinNetwork", {
userId: obj.userId,
domain: obj.domain
}, function (err, networkId) {
done(networkId);
});
})
你不需要在这里包裹异步。当您调用meteor方法服务器端时,它们会像普通函数一样返回。如果正确定义了joinNetwork
方法,则可以执行此操作:
Accounts.onCreateUser(function (options, user) {
var userId = user._id;
var email = options.email;
var domain = Utils.getDomain(email);
var networkId = Meteor.call("joinNetwork", {
userId: obj.userId,
domain: obj.domain
});
...
})
答案 1 :(得分:0)
我认为你的joinNetwork同步版本没有返回任何内容。你在另一个函数中放置了一个返回,即joinNetwork的回调。尝试在另一个函数中拆分下一个部分,并使用networkId在回调函数内调用它。