我如何 return 来自 jQuery 延迟链的值?
How do I return a value from a jQuery deferred chain?
考虑到这个例子,我希望 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/
如何重构此代码以实现此目的?
所以为了说明问题中所述的问题objective是投影返回的承诺以供后续使用。
您需要使用 then() 方法,它允许您 "project" a promise.Before 1.8 您可以使用 pipe() 方法 also.As 使用 pipe()
已从 1.8 开始贬值(参考 https://api.jquery.com/deferred.pipe/)按照@charlietfl 的建议使用 then()
。
现在,如果您像这样更改代码
function function1() {
return function2().then(function(pelle) {
return "hello world";
});
}
function function2() {
return $.Deferred().resolve("function2");
}
function1().done(function(response) {
console.log("response", response);
});
它会导致“response hello world”。
您可以阅读关于相同内容的详尽讨论 http://joseoncode.com/2011/09/26/a-walkthrough-jquery-deferred-and-promise/
已更新 fiddle。
在 function1
中使用了错误的回调方法。你想要 then
而不是 done
Promise 链通过 return 在然后 return 到链中的下一个 then
function function1() {
return function2().then(function(pelle) {
return "hello world";
});
}
考虑到这个例子,我希望 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/
如何重构此代码以实现此目的?
所以为了说明问题中所述的问题objective是投影返回的承诺以供后续使用。
您需要使用 then() 方法,它允许您 "project" a promise.Before 1.8 您可以使用 pipe() 方法 also.As 使用 pipe()
已从 1.8 开始贬值(参考 https://api.jquery.com/deferred.pipe/)按照@charlietfl 的建议使用 then()
。
现在,如果您像这样更改代码
function function1() {
return function2().then(function(pelle) {
return "hello world";
});
}
function function2() {
return $.Deferred().resolve("function2");
}
function1().done(function(response) {
console.log("response", response);
});
它会导致“response hello world”。
您可以阅读关于相同内容的详尽讨论 http://joseoncode.com/2011/09/26/a-walkthrough-jquery-deferred-and-promise/
已更新 fiddle。
在 function1
中使用了错误的回调方法。你想要 then
而不是 done
Promise 链通过 return 在然后 return 到链中的下一个 then
function function1() {
return function2().then(function(pelle) {
return "hello world";
});
}