我有两个 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/