延迟函数并确保最终函数接收到两个数据

Deferred functions and making sure final function receives both data

我希望函数 displayResults() 在呈现值之前获取数据。函数 getResultA() 和 getResultB() 使用 $.Deferred。函数 getResultB() 取决于 getResultA() 的结果。

function getResultA() {
  var deferred = $.Deferred();
  .
  .
  .
  .
  deferred.resolve(someValue);
  return deferred.promise();
}

function getResultB() {
  var deferred = $.Deferred();
  .
  .
  getResultA().done(function(someValue) {
    deferred.resolve(someValue);
    return deferred.promise();
  })
}

function displayResults() {
  getResultB().done(function(response) {
    // display the response
  })
}

我的代码正确吗?

你的 getResultB()promise anti-pattern。您已经从 getResultA() 得到了 return 的承诺。您不需要创建一个新的。你可以只 return 你已有的那个。

function getResultB() {
  .
  .
  return getResultA().then(function(someValue) {
      // whatever code you want here
      // code here can return a new value, return the value you already have
      // after doing some other operations or can return a new promise that
      // will be added to the chain
      return someValue;
  });
}

然后您可以按照您的计划使用getResultB()

function displayResults() {
  getResultB().then(function(response) {
    // display the response
  })
}

注意:我改用 .then() 而不是 .done(),因为这是使用 promises 编码的 ES6 标准方式(它也适用于 jQuery)。因此,随着 jQuery 与 promise 标准更加一致,或者当您使用来自 jQuery 以外来源的 promise 进行编码时,您将不必更改您的代码或风格。