暂停循环执行,直到回调异步函数

时间:2019-06-18 09:36:02

标签: node.js express asynchronous async-await

我正在使用expressjs框架,并尝试使用textMessageNumbers软件包将文本消息发送到request个数字数组。

for(let i = 0; i < textMessageNumbers.length; i++) {
    request('https://LINK_TO_API?destination=' + textMessageNumbers[i] + '&q=' + api + '&message=' + textMessage, { json: true }, function(err, res, body) {
        if(err) {
            res.write("<br><div class='alert alert-warning'>Error occurred while sending text message to " + textMessageNumbers[i] + "</div>")
            callback()
        }

        if(res.body == 0) {
            res.write("<br><div class='alert alert-success'> Text message sent successfully to <b>" + textMessageNumbers[i] + "</b></div>")
            callback()
        } else {
            res.write("<br><div class='alert alert-warning'> Couldn't send message to <b>" + textMessageNumbers[i] + "</b></div>")
            callback()
        }
    })
}

res.write("<br><div class='alert alert-success'> Delivery Note Successfull</div>")
res.end()
return

由于请求函数调用是异步的,因此即使未调用回调,for循环也将继续执行。一旦for循环完成执行,res.end()调用将关闭响应对象,从而使回调内部的res.write()调用无法执行。我如何才能使循环的每次迭代都等到回调完成之后,才能使响应对象仅在回调所有对请求函数的异步调用之后才关闭。

0 个答案:

没有答案