所以我有以下代码循环遍历一个对象:
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') } }) }
我以前曾遇到过这个问题,但无法解决,我该怎么做?
如果您有任何问题,请询问。谢谢。
我最终遵循了@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 } } }
谢谢大家的帮助,不胜感激。