2013-12-01 5 views
2

В функции Accounts.onCreateUser Meteor я хотел бы сделать запрос ajax, чтобы получить информацию о пользователе из API Twitter. В то время как фактический Twitter-звонок работает отлично и извлекает ожидаемые данные, я не могу вернуть это, так как вызов ajax выполняется асинхронно. Вот где я нахожусь:Meteor - onCreateUser Ajax callback

Accounts.onCreateUser(function(options, user) { 

    user.profile = ""; 
    Twitter.get.userinfo({ screen_name: 'username'}, function(data) { 
     user.profile = data; 
    }); 

    return user; 

}); 

Как Accounts.onCraeteUser является частью Метеора, я не уверен, что лучший вариант, чтобы вернуть данные вытащили из запроса. Заранее спасибо.

ответ

1

Оберните свой вызов в асинхронную оболочку (которая преобразует ее в синхронную функцию).

Знайте, что это работает, только если обратный вызов является чем-то вроде function(err, data).

В коде выше вы использовали function(data). Я не слишком уверен в том, что любой из твитов Twitter, делающих это так. Если бы вы могли проверить это на самом деле function(err,data), и если я не буду пытаться изменить ответ с чем-то еще

var getUserInfo = Meteor._wrapAsync(Twitter.get.userinfo.bind(Twitter.get)); 

user.profile = getUserInfo({screen_name: 'username'}); 

Так что Meteor._wrapAsync делает это принимает функцию вы даете его и делает его синхронизирован на стороне сервера. Как только результат возвращается в обратном вызове, возвращается второй параметр (данные).

Если возвращается первый парам, err, он выдает его как ошибку.

+0

Wow! Отсутствие «err» было связано с тем, что я обернул API Twitter по своему собственному методу, но у меня это работает с использованием этого метода. Благодаря! –