Jquery $。当不等待承诺解决时,拒绝

时间:2018-06-11 15:29:46

标签: javascript jquery promise

我有一个需要出去的动态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);
  });
}

控制台输出 两个api调用在.then()执行之后拒绝承诺 console output

所以,我不明白,以及Stack Overflow或jQuery文档中有哪些其他问题无法帮助我解决,为什么.then()在API调用之前表现得一切正常已经完成并解决或拒绝了他们的承诺?在完成所有API调用后如何处理结算或拒绝,或者我是否误解了.when()和承诺的目的?

1 个答案:

答案 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对象,又名$,作为第一个参数。“