所以具有以下通过一个对象的代码来循环:环路通过异步请求
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