我如何等待收益率?

How do I wait for a yield?

我有一个 findOrCreateUser 函数 returns 生成器。但是我需要在函数完成时调用回调 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;
    })
);

您可以使用 co.wrap() 其中 "converts a co-generator-function into a regular function that returns a promise"

var co = require('co');

...

var findOrCreateUser = co.wrap(userRepository.findOrCreateUser)

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