2015-01-25 2 views
1

У меня есть функция findOrCreateUser, которая возвращает генератор. Но когда функция завершится, мне нужно вызвать обратный вызов done. Как мне это сделать?Как подождать выхода?

Я попробовал позвонить next() на генераторе, но результат был отложен.

passport.use(new FacebookStrategy({ 
     clientID: fbConfig.appId, 
     clientSecret: fbConfig.appSecret, 
     callbackURL: 'http://localhost:' + (process.env.PORT || 3000) + '/auth/facebook/callback' 
    }, 
    function(token, tokenSecret, profile, done) { 

     var user = yield userRepository.findOrCreateUser(
      profile.id, 
      profile.name, 
      'pic'); 

     return user; 
    }) 
); 

ответ

1

Вы можете использовать co.wrap(), который «превращает когенератор-функцию в обычную функцию, которая возвращает обещание»

var co = require('co'); 

... 

var findOrCreateUser = co.wrap(userRepository.findOrCreateUser) 

findOrCreateUser(profile.id, profile.name, 'pic').then(function() { 
    done(); 
}); 
+0

Это не похоже на работу. выход должен быть в пределах функции генератора, и я не могу это сделать, потому что функция вызывается паспортом. –

+0

@IanWarburton Не могли бы вы использовать co в паспортной функции? – theliberalsurfer

+0

У меня есть голубая птица. Я пытался превратить генератор в обещание, поэтому я мог бы назвать «тогда», но я не мог понять, как превратить генератор в обещание. –

Смежные вопросы