如何从jQuery延迟链返回值?

时间:2016-03-03 15:22:14

标签: jquery deferred

鉴于这个例子,我希望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/

如何重构此代码才能实现此目的?

2 个答案:

答案 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