jQuery deferreds - 多个块中的执行顺序
jQuery deferreds - order of execution in multiple blocks
注意
这个问题只发生在特定的服务器端 api。因此它解决了错误的问题。我不会删除它,因为它有答案和评论。
我正在尝试执行几个 ajax 请求,在每个请求完成后做一些事情,在所有这些都完成后做一些其他事情,为此我正在使用下面的代码:
let
myarr = [],
myfunc = arg => myarr.push(arg);
$.when(
$.post(myparams).done(myfunc),
$.post(otherparams).done(myfunc),
$.post(yetanother).done(myfunc)
// it comes out with only one arg
).then(e => console.log(myarr));
但是在执行then
块时通常只执行第一个操作的done
,我该如何解决?
如果是重复的,我很抱歉,但老实说,我什至不知道要搜索什么:/
评论
我还尝试创建自己的延迟,我将在其中执行 ajax 并在 done
块内解析它们,但产生了相同的结果。
仅使用 done
或仅使用 then
,相同。
根据 jQuery 关于 $.when()
的文档:
Each argument [of .then()
] is an array with the following structure: [ data, statusText, jqXHR ]
意味着你可以做这样的事情...
$.when(
$.post(myparams),
$.post(otherparams),
$.post(yetanother)
).then((res1, res2, res3) => { //Arg for each result
myfunc(res1[0]); //Call myfunc for result 1's data
myfunc(res2[0]); //Call myfunc for result 2's data
myfunc(res3[0]); //Call myfunc for result 3's data
});
虽然更简洁的版本可能是这样的...
let
myarr = [],
myfunc = arg => myarr.push(arg);
$.when(
$.get('https://jsonplaceholder.typicode.com/todos/1'),
$.get('https://jsonplaceholder.typicode.com/todos/2'),
$.get('https://jsonplaceholder.typicode.com/todos/3')
).then((...results) => { //Get all results as an array
results.map(r=>r[0]).forEach(myfunc); //Call myfunc for each result's data
console.log(myarr);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
注意
这个问题只发生在特定的服务器端 api。因此它解决了错误的问题。我不会删除它,因为它有答案和评论。
我正在尝试执行几个 ajax 请求,在每个请求完成后做一些事情,在所有这些都完成后做一些其他事情,为此我正在使用下面的代码:
let
myarr = [],
myfunc = arg => myarr.push(arg);
$.when(
$.post(myparams).done(myfunc),
$.post(otherparams).done(myfunc),
$.post(yetanother).done(myfunc)
// it comes out with only one arg
).then(e => console.log(myarr));
但是在执行then
块时通常只执行第一个操作的done
,我该如何解决?
如果是重复的,我很抱歉,但老实说,我什至不知道要搜索什么:/
评论
我还尝试创建自己的延迟,我将在其中执行 ajax 并在 done
块内解析它们,但产生了相同的结果。
仅使用 done
或仅使用 then
,相同。
根据 jQuery 关于 $.when()
的文档:
Each argument [of
.then()
] is an array with the following structure:[ data, statusText, jqXHR ]
意味着你可以做这样的事情...
$.when(
$.post(myparams),
$.post(otherparams),
$.post(yetanother)
).then((res1, res2, res3) => { //Arg for each result
myfunc(res1[0]); //Call myfunc for result 1's data
myfunc(res2[0]); //Call myfunc for result 2's data
myfunc(res3[0]); //Call myfunc for result 3's data
});
虽然更简洁的版本可能是这样的...
let
myarr = [],
myfunc = arg => myarr.push(arg);
$.when(
$.get('https://jsonplaceholder.typicode.com/todos/1'),
$.get('https://jsonplaceholder.typicode.com/todos/2'),
$.get('https://jsonplaceholder.typicode.com/todos/3')
).then((...results) => { //Get all results as an array
results.map(r=>r[0]).forEach(myfunc); //Call myfunc for each result's data
console.log(myarr);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>