如何将预定义函数传递给异步

时间:2018-03-21 06:03:04

标签: javascript node.js async.js

我对如何在异步内传递预定义函数感到有点困惑。

以下代码完美无缺

async.auto({
    getAccessToken: function (callback) {
        let x = {
            access_token: signToken({ userId: user._id }),
            client: req.user._id,
            user: user._id,
            scope: user.scopes,
            expires: new Date().setDate(new Date().getMinutes() + 15)
        };

        callback(null, x);
    }
}, (err, res) => {
    console.log(res);
});

但我想在异步自动任务列表中使用预定义的函数。

例如: 为此,我需要传递一些值。我被困在这里。

async.auto({
    getAccessToken: generateAccessToken // this is where i am stuck
}, (err, res) => {
    Logger.info('here');
    Logger.info(res);
});

generateAccessToken = (user, client, cb) => {
    // cb(null, 'asd')
    let accessToken = new AccessToken({
        access_token: signToken({ userId: user._id }),
        client: client,
        user: user._id,
        scope: user.scopes,
        expires: new Date().setDate(new Date().getMinutes() + 15)
    });

    accessToken.save((err, token) => {
        if (err) {
            cb(err, null);
            return;
        }
        cb(null, token);
        return;
    });
}

如果我传递值,我会收到以下错误:

return supportsSymbol && fn[Symbol.toStringTag] === 'AsyncFunction';
                               ^

TypeError: Cannot read property 'Symbol(Symbol.toStringTag)' of undefined

1 个答案:

答案 0 :(得分:0)

使用以下解决方案解决了问题。

async.auto({
                    getAccessToken: ((cb) => {
                        generateAccessToken(user, req.user._id, cb)
                    })
                }, (err, res) => {
                    Logger.info('here');
                    Logger.info(res);
                });

不确定它是否是最佳解决方案。所以这个问题会保持一段时间。感谢