Javascript 我如何等待收益?

Javascript 我如何等待收益?,javascript,node.js,callback,generator,passport.js,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.P

我有一个函数
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;
    })
);

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


这似乎不起作用。yield需要在生成器函数中,我不能这样做,因为函数是由passport调用的。@IanWarburton您能在passport函数中使用co吗?我有bluebird。我试图将生成器转换为承诺,以便调用“then”,但我找不到如何将生成器转换为承诺。@IanWarburton现在如何使用
co.wrap()
Yes co.wrap似乎做了一些有用的事情。除了现在,我的认证总是错误的。我很快就要完成我的网站了。。。再过几天Javascript的痛苦,我将回到.net。
var co = require('co');

...

var findOrCreateUser = co.wrap(userRepository.findOrCreateUser)

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