鉴于这个例子,我希望hello world
会被链接起来。但是,某些Deferred / Promise框架可以,但似乎jQuery无法做到这一点。
function function1() {
return function2().done(function(pelle) {
return "hello world";
});
}
function function2() {
return $.Deferred().resolve("function2");
}
function1().done(function(response) {
console.log("response", response);
});
https://jsfiddle.net/ysbjr1nm/
如何重构此代码才能实现此目的?
答案 0 :(得分:1)
在function1
中使用错误的回调方法。您希望then
不是done
承诺链通过返回工作然后返回到链中的下一个then
function function1() {
return function2().then(function(pelle) {
return "hello world";
});
}
的 DEMO 强>
答案 1 :(得分:-1)
因此,为了说明问题中所述的问题,目标是预测为后续使用而返回的承诺。
你需要使用 then()方法,它允许你“预测”一个promise.Before 1.8之前你也可以使用 pipe()方法。使用{根据@charlietfl的建议,{1}}已从1.8开始(参考https://api.jquery.com/deferred.pipe/)使用pipe()
折旧。
所以现在如果你改变你的代码
then()
这将导致“响应问候世界”。
您可以阅读有关http://joseoncode.com/2011/09/26/a-walkthrough-jquery-deferred-and-promise/
的详细讨论更新了fiddle。