【问题标题】:Not defined callback using async未使用异步定义回调
【发布时间】:2018-08-12 14:29:50
【问题描述】:

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

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

【问题讨论】:

  • 错误是发生在您的代码上还是其他地方?编辑:实际上刚刚意识到问题出在哪里,哈哈
  • 无法真正得到比该错误消息更清晰的信息...callback 未在operations.push(listBuckets(req.user.accessToken, 'myPrefix', callback)) 中定义
  • 另外,listBuckets 不会返回任何东西,所以operations.push(listBuckets(...)) 不会向operations 添加任何有用的东西
  • @Phil 你能帮我指出代码更正的错误吗?理解这个错误对我有很大帮助(我是节点新手)。
  • @Phil 我在阅读代码时犯了一个简单的错误,不需要snark:/

标签: javascript node.js async.js


【解决方案1】:

这里的这一行:

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)
})

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

【讨论】:

    猜你喜欢
    • 2016-04-03
    • 2017-10-05
    • 1970-01-01
    • 1970-01-01
    • 2020-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多