未使用async定义回调

时间:2018-03-05 00:18:39

标签: javascript node.js async.js

我正在尝试使用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

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

1 个答案:

答案 0 :(得分: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)
})

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