在承诺错误中没有捕获但是从第一次调用获得结果

时间:2017-11-20 05:10:35

标签: javascript ajax asynchronous promise es6-promise

我有两个AJAX调用,第二个依赖于第一个,所以我决定使用promises。我一直在控制台中出现未捕获(在承诺中)abc123 错误。请注意abc123是我期望从第一个AJAX调用中获得的id。第二个AJAX调用永远不会进入成功函数。

var promise = new Promise(function(reject, resolve) {
  $.ajax({
    url: url1, 
    dataType: 'json',
    success: function (obj1) {
      console.log("Got obj1");
      resolve(obj1.id);
    }
  });
});

promise.then((id)=> {
  $.ajax({
    url: url2, 
    dataType: 'json',
    success: function (obj2) {
      console.log("Got obj2");
    }
  });
});

该结构与Basic Example完全相同。我真的很困惑我做错了什么。

1 个答案:

答案 0 :(得分:2)

你混淆了回调函数的顺序:<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script> <div class="logo_container"> <div class="lines"><img src="https://d30y9cdsu7xlg0.cloudfront.net/png/967511-200.png"></div> </div>是第一个参数,resolve是第二个参数,所以当你调用第二个参数reject时,你实际上拒绝了你的承诺。

但是,在you should not use the Promise constructor时请注意dodging jQuery promises - 只需使用Promise.resolve来转换resolve(obj.id)返回本地的jQuery承诺:

$.ajax