小编典典

遍历异步请求

node.js

所以我有以下代码循环遍历一个对象:

for(var x in block){
    sendTextMessage(block[x].text, sender, function(callback){
        //increment for?
    })
}

对于每个迭代,我要发出一个请求(发送一条Facebook消息),仅在该请求完成后,我才要进行下一个迭代,这是因为没有任何回调,消息将不会正确地连续发送。

function sendTextMessage(text, sender, callback) {
    let messageData = { text:text}
    request({
        url: 'https://graph.facebook.com/v2.6/me/messages',
        qs: {access_token:token},
        method: 'POST',
        json: {
            recipient: {id:sender},
            message: messageData,
        }
    }, function(error, response, body) {
        if (response.statusCode >= 200 &&  response.statusCode < 300){
            if(callback) callback('success')
        }
    })
}

我以前曾遇到过这个问题,但无法解决,我该怎么做?

如果您有任何问题,请询问。谢谢。


阅读 308

收藏
2020-07-07

共1个答案

小编典典

我最终遵循了@Matt Diamond的建议,并执行了如下所示的递归函数:

function buildFlow(block, sender){
    var i = 0;
    recursive()
    /*  for(var x in block){
        sendTextMessage(block[x], block[x].type, sender)
        console.log(x)
    }*/
    function recursive(){
        if (i<Object.keys(block).length){
            sendTextMessage(block[Object.keys(block)[i]], block[Object.keys(block)[i]].type, sender, function(){
                i++
                recursive()
            })

        }else{
            i = 0
        }
    }
}

谢谢大家的帮助,不胜感激。

2020-07-07