所以具有以下通過一個對象的代碼來循環:環路通過異步請求
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')
}
})
}
我以前有過這個問題,但沒有能夠解決它,我怎麼能以某種方式做到這一點?
如果您有任何問題,請詢問。謝謝。
有人可能會跳過一個完整的答案,但這裏有一個快速提示。在這些情況下,您通常需要的是遞歸解決方案:在回調中調用您的sendTextMessage函數。 –
評論 - 爲什麼對您來說消息以正確的順序發送給API很重要?由於網絡延遲,他們可能會以不同的順序到達Facebook,並且文本可能以不同的順序到達設備,我認爲這些級別沒有保證。 –
同時,循環對象的順序不能保證。使用數組來處理順序非常重要 – MarkoCen