我有一个需要出去的动态API调用数组。但是,jQuery的$ .when似乎没有等待承诺解决或被拒绝,或者我不理解如何正确使用promises。
代码
function addEntry(data) {
return new Promise(function(resolve, reject) {
_customAPIClass_.post('some/url/path', data)
.done(function(){
console.log('resolving');
resolve(1000)
})
.catch(function(){
console.log('rejecting');
reject(2000);
})
});
}
let deferreds = [];
$.each(form.find(el), function(i, element) {
let data = {
id: $(element).find('.id').val(),
name: $(element).find('.name').val()
}
deferreds.push(addEntry(data));
}
if (deferreds.length) {
$.when.apply(deferreds).then(function(data){
console.log('All done', data)
}, function(err){
console.log('error', err);
});
}
所以,我不明白,以及Stack Overflow或jQuery文档中有哪些其他问题无法帮助我解决,为什么.then()
在API调用之前表现得一切正常已经完成并解决或拒绝了他们的承诺?在完成所有API调用后如何处理结算或拒绝,或者我是否误解了.when()
和承诺的目的?
答案 0 :(得分:0)
变化:
$。when.apply(deferreds)
为:
$。when.apply($,deferreds)
如下所述:https://medium.com/sungthecoder/making-multiple-ajax-calls-and-deciphering-when-apply-array-b35d1b4b1f50并且如Kevin B的评论所述:
“当我们调用$ .when()函数时,函数内的'this'关键字隐式绑定到jQuery对象。但是当我们调用$ .when.apply()时,我们必须将'this'关键字显式绑定到我们知道绑定必须与jQuery对象一起使用,所以我们传递jQuery对象,又名$,作为第一个参数。“