未使用async定义回调

问题描述 投票:0回答:1

我正在尝试使用async来实现同步流程。

按照this post中的示例,我确实实现了如下代码:

function listBuckets(accessToken, prefix, callback) {
    var url = 'https://www.googleapis.com/storage/v1/b'
    request.get({
        url: url,
        auth: {
            'bearer': accessToken
        }
    }, function(err, res) {
        console.log('API Endpoint:  ' + url);
        console.log('Status Code: ' + res.statusCode);
        console.log('Response Body:\n' + res.body);
        callback(null, {
            statusCode: res.statusCode,
            body: res.body
        });
    });

}

router.get('/list', oauth2.required, (req, res, next) => {
    var operations = [];
    operations.push(listBuckets(req.user.accessToken, 'myPrefix', callback));
    async.series(operations, function (err, results) {
        const statusCode = results[0].statusCode;
        const body = results[0].body;
    });
});

但是,我收到以下错误:ReferenceError: callback is not defined

你能帮我指出我做错了什么吗?

javascript node.js async.js
1个回答
3
投票

这一行在这里:

operations.push(listBuckets(req.user.accessToken, 'myPrefix', callback));

现在这样做,是用这些参数调用listBuckets,然后将该结果推送到操作数组。

你想要做的是将函数推送到数组。 If we look at the docs for the async lib,我们会注意到这些函数中的每一个都接受一个回调参数,所以我们在这里这样做:推送一个接受callback的函数,然后用该回调函数调用listBuckets函数。

operations.push(callback => {
  listBuckets(req.user.accessToken, 'myPrefix', callback)
})

随意评论是否以及如何改进我的解释。

© www.soinside.com 2019 - 2024. All rights reserved.