我知道如何使用 $.when 一次执行多个 ajax 调用。 例如:
$.when( d1, d2 ).done(function ( v1, v2 ) {
console.log( v1 ); // "Fish"
console.log( v2 ); // "Pizza"
})
但是,我想在方法中使用它,以便我可以多次使用它来返回值(例如
function getDataFor(list) {
var data = [];
$.when(d1(list), d2(list)).done(function (v1, v2) {
console.log(v1);
console.log(v2);
data = [v1, v2];
});
return data;
}
正确的格式是什么?另外,在上面的示例中使用 .then 而不是 .done 基本上没有用,除非我计划在该 promise 之后再有另一个 promise ?
编辑:我不认为这是一个重复的问题。虽然我理解为什么看起来是这样,但我实际上只是想知道是否有一个开箱即用或基于库(例如 jquery/bluebird)的包装器,例如 .NET 的 WaitAll 方法,它采用一组异步方法调用并阻塞线程,直到它们全部完成。我承认这是不可能的,但我不认为这是重复的。
最佳答案
不,一个函数不可能多次返回,并且 it's not possible to return any result variables在ajax请求成功之前。然而,您可以简单地返回结果数组的 promise - 但为此您需要 use then
instead of done
这样您就可以从回调中返回
。 (专业提示:永远不要使用done
或fail
)。
function getDataFor(list) {
return $.when(d1(list), d2(list)).then(function (v1, v2) {
// ^^^^^^ ^^^^
console.log(v1);
console.log(v2);
var data = [v1, v2];
return data;
// ^^^^^^
});
}
关于javascript - 如何在一个同步块(synchronized block)中异步执行多个ajax调用(jquery),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46673740/