【发布时间】:2015-09-26 23:44:55
【问题描述】:
如何使用 JS Promises 进行链式两个 JQuery 异步调用,同时避免厄运金字塔? 我知道我可以像这样将“JQuery”承诺转换为真正的承诺:
Promise.resolve($.getJSON(url, params));
如果我只想等待一个承诺,我可以这样做:
Promise.resolve($.getJSON(url1, params1))
.then(function(result){
// do stuff
});
如果我想等待两个不同的 ajax 调用完成,我可以这样做:
Promise.all(
[
Promise.resolve($.getJSON(url1, params1)),
Promise.resolve($.getJSON(url2, params2))
]).then(function(results_array){
// do stuff
});
但是,如果我想让一个电话接在另一个电话之后,这是行不通的:
Promise.resolve($.getJSON(url1, params1))
.then(function(result){
//do stuff
return Promise.resolve($.getJSON(url2, params2));
}).then(function(result){
//result is a promise, not the results from the second call to getJSON()...
//and it doesn't even wait for the second call to finish.
//result.then() is just going to bring me further into the pyramid of doom :(
});
不知何故,我想在“do stuff”函数中构造的 promise 上调用 .then()。这样做的惯用方法是什么?
【问题讨论】:
-
result周围多了两个右括号
标签: javascript jquery es6-promise