【问题标题】:How do I wait for a yield?我如何等待收益?
【发布时间】:2015-01-25 00:04:37
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

    var co = require('co');
    
    ...
    
    var findOrCreateUser = co.wrap(userRepository.findOrCreateUser)
    
    findOrCreateUser(profile.id, profile.name, 'pic').then(function() {
        done();
    });
    

    【讨论】:

    • 这似乎不起作用。 yield 需要在生成器函数中,我不能这样做,因为该函数是由护照调用的。
    • @IanWarburton 你能在护照功能中使用 co 吗?
    • 我有蓝鸟。我试图将生成器变成一个承诺,这样我就可以调用“then”,但我不知道如何将生成器变成一个承诺。
    • @IanWarburton 现在和co.wrap()一起怎么样
    • 是的 co.wrap 似乎做了一些有用的事情。除了现在 isAuthenticated 总是假的。我已经快要完成我的网站了……再忍受几天的 Javascript 痛苦,我将回到 .net。
    猜你喜欢
    • 1970-01-01
    • 2011-07-01
    • 1970-01-01
    • 2012-08-15
    • 2018-01-05
    • 2021-08-09
    • 2021-10-30
    • 2012-10-28
    • 1970-01-01
    相关资源
    最近更新 更多