我有一个函数query1()
,其中包含一个$.when()promise,我想用它作为父$.when()promise的参数。从query 1()返回的值应该向下传递,就像在变量b
中一样。问题是父$.when在子,, the之前解析,但它需要等待。
纠正顺序的最佳方法是什么,以便父级等待子级解决?
$.when(query1(a))
.then( function(b) {
console.log("step 3");
return query2(b);
})
.then( function(c) {
console.log("step 6")
});
function query1(a) {
console.log("step 1");
$.when(asynchronous_function())
.then( function(data) {
console.log("step 2");
return data;
});
}
function query2(b) {
console.log("step 4");
$.when(asynchronous_function())
.then( function(data) {
console.log("step 5");
return data;
});
}
控制台将显示:
Step 3
Step 6
Step 1
Step 2
Step 4
Step 5
我在这里试图避免“死亡金字塔”的事情,使我的代码更具可读性和模块化。
谢谢你的帮助。
1条答案
按热度按时间xqk2d5yq1#
从
query1()
返回的值...这就是所缺少的:
query1()
没有return
语句。then
回调中的语句是用于 * 该 * 回调函数的return
语句,而不是用于query1()
的function
语句。每个需要返回重要内容的function
都需要其 * 自己的 *return
语句。因此,将其添加到
query1
和query2
中。话虽如此,当您要传递一个promise对象时,没有理由调用
$.when
,该promise可以直接用于在其上调用then
。这会导致:
现在已经没有理由再使用jQuery延迟对象来处理promise了,因为ECMA Script 2015 JavaScript有了原生的promise。
您甚至可以使用
async
/await
语法: