我遍历一个数组,每个数组都运行ajax请求。我需要按顺序执行请求,因此我可以接听最后一个请求并成功运行一个函数。
目前我正在运行(简体):
$.each(array, function(i, item){
ajax_request(item.id, item.title, i);
})
function ajax_request(id, title, i){
$.ajax({
async: false,
url: 'url here',
success: function(){
if(i == array.length-1){
// run function here as its the last item in array
}
}
})
}
但是,使用async:false会使应用程序无响应/变慢。但是,如果没有async:false,有时其中一个请求会挂起并在最后发送的ajax请求返回后实际上返回。
我如何不使用async:false来实现呢?
您可以使用本地函数来运行ajax调用,并且在每个后续的成功处理程序中,可以启动下一个ajax调用。
function runAllAjax(array) {
// initialize index counter
var i = 0;
function next() {
var id = array[i].id;
var title = array[i].title;
$.ajax({
async: true,
url: 'url here',
success: function(){
++i;
if(i >= array.length) {
// run function here as its the last item in array
} else {
// do the next ajax call
next();
}
}
});
}
// start the first one
next();
}
在2016年使用使用promises的选项更新此答案。这是您依次运行请求的方式:
array.reduce(function(p, item) {
return p.then(function() {
// you can access item.id and item.title here
return $.ajax({url: 'url here', ...}).then(function(result) {
// process individual ajax result here
});
});
}, Promise.resolve()).then(function() {
// all requests are done here
});
这是并行运行它们的方式,并返回所有结果:
var promises = [];
array.forEach(function(item) {
// you can access item.id and item.title here
promises.push($.ajax({url: 'url here', ...});
});
Promise.all(promises).then(function(results) {
// all ajax calls done here, results is an array of responses
});
但是,如果我在两个连续的'>'字符之间放置空格,则不会产生错误。ANTLR无法区分上述规则和用于识别移位表达式的规则,但我不知道如何修改语法来解决这种歧义。如有任何帮助,不胜感激。
编写JavaScript代码时,我们要时刻牢记,JavaScript引擎是一个事件驱动的执行引擎,代码总是以单线程执行,而回调函数的执行需要等到下一个满足条件的事件出现后,才会被执行。 例如,setTimeout()函数可以传入回调函数,并在指定若干毫秒后执行: function printTime() { console.log('It is time!'); } setTimeout
问题内容: 我对Node.js并不陌生,尽管我通常对JavaScript非常熟悉。我的问题是关于如何处理node.js中的错误的“最佳实践”。 通常,在对Web服务器,FastCGI服务器或各种语言的网页进行编程时,我在多线程环境中使用带有阻止处理程序的Exceptions。当有请求进入时,我通常会执行以下操作: 这样,我始终可以处理内部错误并向用户发送有效响应。 我知道使用node.js可以执行
问题内容: 我是bash脚本的新手,但我不理解为什么它不起作用 第3行的替代替换错误 问题答案: 该替换在Bash 4.2.8中正常工作(并且根据文档看起来还不错)。 我最好的猜测是您实际上并没有使用Bash-您如何调用脚本?如果您正在执行此操作,则可能会与Dash或类似的程序一起运行(Dash确实在第3行给出了替换错误)。尝试使用Bash()显式运行它。 如果事实证明您实际上是在使用Dash,这
异步代码是指当调用后不会立即完成的代码。 setTimeout(() => { console.log('do stuff'); }, 3000 ) 在 setTimeout 执行完3秒后 do stuff 会输出到控制台。我们可以看出当指定的时间过去后我们所提供的异步函数会触发。现在来看个更有启发性的示例: doWork( () => { console.log('call me whe
问题内容: 我有一个Express中间件,因为我想在其中使用中间件来清理我的代码。 问题在于,当它拒绝时,它不会进入我的错误中间件,但是如果我删除了关键字,并且在中间件中,它将删除。 所以我得到的不是输入我的错误处理中间件,而是如何让错误冒泡并表达处理它? 问题答案: 问题是当它拒绝时,它不会进入我的错误中间件,但是如果我删除了async关键字并扔进了中间件中,它就会去。 目前不支持诺言,将来的版