我如何等待收益?

时间:2015-01-25 00:04:37

标签: javascript node.js callback generator passport.js

我有一个返回生成器的函数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 个答案:

答案 0 :(得分:1)

您可以使用co.wrap()“将共同生成器函数转换为返回承诺的常规函数​​”

var co = require('co');

...

var findOrCreateUser = co.wrap(userRepository.findOrCreateUser)

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