javascript - 没有陷入 promise 错误,但从第一次调用中得到结果

标签 javascript ajax asynchronous promise es6-promise

我有两个 AJAX 调用,第二个调用取决于第一个调用,所以我决定使用 Promise。我不断在控制台中收到 未捕获( promise )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 完全相同。我真的很困惑我做错了什么。

最佳答案

您混淆了回调函数的顺序:resolve 是第一个参数,reject 是第二个参数,因此当您调用第二个参数时(解决(obj.id))你实际上拒绝了你的 promise 。

但是,请注意 you should not use the Promise constructor无论如何,当dodging jQuery promises - 只需使用 Promise.resolve$.ajax 返回到 native 的 jQuery promise :

var promise = Promise.resolve($.ajax({
  url: url1, 
  dataType: 'json'
})).then(obj1 => {
  console.log("Got obj1");
  return obj1.id;
});

promise.then(id => {
  return $.ajax({
//^^^^^^ don't forget this
    url: url2, 
    dataType: 'json'
  });
}).then(obj2 => {
  console.log("Got obj2");
});

关于javascript - 没有陷入 promise 错误,但从第一次调用中得到结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47385403/

相关文章:

javascript - JqPlot - LINE 和 FILL 的不同颜色如何?

javascript - 在 Reactjs 中异步加载谷歌分析嵌入 api 脚本

php - 使 PHP 的 mail() 异步

javascript - 如何使用自定义的快速验证器?

javascript - JS中的输出缓冲区?

javascript - XMLHttpRequest 在 $.ajax 工作的地方给出 CORS 错误

jquery - 如何使用jquery查找和替换某些内容?

javascript - 使用 window.location.replace() 在 AJAX 上成功重定向

c# - 立即等待和稍后等待的区别

javascript - 从字符串数组映射索引