所以我有以下代码循环遍历一个对象:
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
}
}
}
谢谢大家的帮助,不胜感激。
我有四个UITextFields我想在UIAlertView中使用,目前这是它看起来的样子 我希望能够做的是限制每个框为4个字符,每个字段一旦达到4个字符的限制,那么我希望下一个UITextField成为第一个响应器。 我也希望能够做到这一点反过来,所以如果字符正在删除,一旦没有字符可用在第二个字段,到第一个,并开始删除,等等。
问题内容: 同步请求和异步请求之间的性能(速度方面)是否有差异? 使用异步请求的所有原因是什么? 问题答案: 您应该始终使用异步Ajax请求,实际上,我只知道应该使用同步Ajax请求的一个地方,即您是否在Ajax请求中,将新的JavaScript文件嵌入客户端,然后引用类型和/或原始Ajax请求返回的JavaScript文件中的对象。然后,应该(或可以理智地)通过使用同步Ajax请求包括对这个新J
问题内容: 当我使用of方法时,和之间有什么区别? 问题答案: Mozilla开发人员:同步和异步请求 支持同步和异步通信。但是,一般而言,出于性能方面的考虑,异步请求应比同步请求优先。 简而言之,同步请求会阻止代码执行,并可能泄漏内存和事件。这可能会导致严重的问题。使用同步请求的唯一可行理由是更轻松地促进其中的下载。
问题内容: 我有一个ajax问题: 如果循环6次(在我的foreach循环中),我应该对服务器发出6个异步请求。但是在这种情况下,ajax调用是同步调用的,而不是异步调用的。有人知道为什么会这样吗? 问题答案: 好,谢谢。经过几个小时的分析和反思,我意识到了为什么该脚本会同步运行:我打开script.php文件,并注意到了这一点以及该文件的开头: 因此,我对使用会话的php脚本进行了并行ajax调
我希望我的请求触发一些长时间运行的操作,这些操作应该在后台执行。我编写了以下实现,应该在后台处理我的操作,但实际上我的请求是同步执行的: 在日志中,我看到以下内容: 我看到我的在另一个线程中执行,但出于某种原因,我的原始请求等待sleep完成 更新1:
我们正在尝试使用 guzzle 执行并发异步请求。在浏览了一些资源(例如这样和这样)之后,我们提出了一些在下面共享的代码。但是,它没有按预期工作。 看起来Guzzle正在同步而不是异步地处理这些请求。 出于测试目的,我们点击一个内部url,它会Hibernate5秒钟。当并发数为10时,我们预计所有10个请求最初将被排队并几乎同时发送到服务器,在那里它们将等待5秒钟,然后几乎所有的请求将几乎同时完