【问题标题】:Why use defer with new promise [duplicate]为什么使用 defer 和新的承诺 [重复]
【发布时间】:2018-01-22 21:58:43
【问题描述】:

以前从未使用过defer,但我的代理要求我使用带有承诺的defer

在 mozilla 延迟页面中,它说 defer 已过时,不应再使用。但在同一页面中有示例。

我的问题是,为什么要在 promise 中使用 defer?下面的代码有什么好处,只写更少的代码?我应该定义一个新的承诺而不是那个?

export function defer () {
  const deferred = {}
  deferred.promise = new Promise((resolve, reject) => {
    deferred.resolve = resolve
    deferred.reject = reject
  })

  return deferred
}

以及使用它的代码:

export async function waitForPredicate (peer, path, predicate, cancelToken) {
  const deferredFetcher = defer()
  ...
  let result = predicate(data)
  if (result) {
    deferredFetcher.resolve(result)
  }
})

【问题讨论】:

  • 你的“代理人”是谁?
  • 我不能给我的代理名字,但它很大。其实我不是在问 defer().promise 和 Promise 之间的区别。我在问为什么要使用旧式 defer 作为承诺。
  • 我要求你更换你的代理人——他不懂承诺 :-)
  • 我不这么认为,他是这方面的大师。我没有写完整的故事。有一个承诺竞赛,其中之一是超时承诺。还有 tagPromise 功能。人们仍然使用它一定是有原因的。

标签: javascript promise deferred


【解决方案1】:

在 ES6 Promise 模式被标准化之前,延迟是一个模式/视图到 Promise 中,可以修改状态。

【讨论】:

  • 这与 ES6 标准化无关。
  • @Bergi 我正在尝试在这里提供历史上下文。
  • 当你在其他类中使用它们时有时需要延迟,而你不需要使用承诺。我的意思是你已经在 defer 对象中有一个新的 promise,你可以随时使用 use,你也可以在代码中使用 resolve 和 reject 作为参数。
猜你喜欢
  • 2013-01-06
  • 2012-12-24
  • 2020-10-25
  • 1970-01-01
  • 2021-10-10
  • 2016-03-09
  • 2016-06-16
  • 1970-01-01
  • 2020-05-28
相关资源
最近更新 更多