【问题标题】:Returning promise instead of jquery ajax call返回承诺而不是 jquery ajax 调用
【发布时间】:2016-04-07 18:20:47
【问题描述】:

我有一个预计会调用 jquery.ajax 的函数,并将其作为承诺返回以供进一步处理。

但是,有时,它有足够的信息来同步进行,而无需 ajax 调用。它仍然需要返回一个承诺,以履行与调用者的合同。这样做的惯用方法是什么?

例如

function f(x) {
  return x? 
    $.ajax({url: "http://myServer", data: x, ...})
    : /* what should be here? */;
}

【问题讨论】:

  • 你试过Promise.resolve()
  • 应该用什么来兑现承诺?这些数据来自哪里?
  • 数据在本地可用。为了这个简单的示例,它可以是 {}。 jQuery.when({}) 似乎做我想做的事,而且很简洁。 new Promise.resolve(...) 感觉太重(语法上),这就是我问这个问题的原因
  • @DavidGoldfarb:它是Promise.resolve({})(不是new),它和jQuery 的when 一样轻巧,但使用了正确的promise :-)
  • 谢谢。哪个被认为更惯用或更易读(在已经使用 jQuery 的代码中)?

标签: javascript jquery ajax promise


【解决方案1】:

要创建一个已实现的 jQuery 承诺,您可以使用 jQuery.when:

return $.when(…);

要创建一个被拒绝的 jQuery 承诺,你需要使用一些更复杂的东西(但至少你可以链接它):

return $.Deferrred().reject(new Error(…)).promise();

【讨论】:

  • 是 $.when 被认为更“合适”(可读,惯用等)然后 Promise.resolve(...)?
  • @DavidGoldfarb:不,它只是做了一些不同的事情——它返回一个 jQuery 承诺而不是正确的 ES6 Promise。所以如果你使用 jQuery,你应该使用$.when
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-13
  • 2016-06-15
  • 1970-01-01
  • 1970-01-01
  • 2014-06-14
相关资源
最近更新 更多