我知道如何使用$ .when一次执行多个ajax调用。 E.g:
$.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 over .done是否基本无用,除非我计划在另一个承诺之后遵循那个?
编辑:我不认为这是一个重复的问题。虽然我理解为什么会这样,但我真的只是想知道是否有一个开箱即用的或基于库的(例如,jquery / bluebird)包装器,如.NET的WaitAll方法,它采用一组异步调用并阻塞线程,直到它们全部完成。我已经接受了这是不可能的,但我觉得它不重复。
答案 0 :(得分:1)
不,函数多次返回都不可能,并且在ajax请求成功之前it's not possible to return any result variables。但是,您可以简单地返回结果数组的承诺 - 但为此您需要use then
instead of done
,以便您可以从回调中return
。 (Protip:只是从不使用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;
// ^^^^^^
});
}