【发布时间】:2017-11-22 00:32:52
【问题描述】:
所以我有以下代码来循环一个对象:
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,并且文本可能会以不同的顺序到达设备,我认为在这些级别上无法保证。
-
同时,不保证循环对象的顺序。使用数组进行订单逻辑
标签: javascript node.js loops express