在Meteor的Accounts.onCreateUser
函数中,我想发一个ajax请求来从Twitter API获取用户详细信息。虽然实际的Twitter调用工作正常并检索预期的数据,但由于ajax调用是异步完成的,因此无法返回。这是我在的地方:
Accounts.onCreateUser(function(options, user) {
user.profile = "";
Twitter.get.userinfo({ screen_name: 'username'}, function(data) {
user.profile = data;
});
return user;
});
由于Accounts.onCraeteUser
是Meteor的一部分,我不确定返回从请求中提取的数据的最佳选择。提前谢谢。
答案 0 :(得分:1)
将您的呼叫包装成异步包装器(将其转换为同步功能)。
请注意,仅当回调类似于function(err, data)
时才有效。
在上面的代码中,您使用了function(data)
。我不太确定任何这样做的Twitter apis。如果你可以检查它实际上是function(err,data)
,如果没有,我会尝试用其他东西编辑答案
var getUserInfo = Meteor._wrapAsync(Twitter.get.userinfo.bind(Twitter.get));
user.profile = getUserInfo({screen_name: 'username'});
那么Meteor._wrapAsync
所做的是你需要给它的功能,并使它在服务器端同步。只要在回调中返回结果,就会返回第二个参数(数据)。
如果返回第一个参数err
,则会将其作为错误抛出。