【问题标题】:JQueryPromise to Promise - how to convert?JQueryPromise 到 Promise - 如何转换?
【发布时间】:2017-05-02 18:42:54
【问题描述】:

我有一段代码返回一个 JQuery 承诺:

const jqProm = server.downloadAsync();

我希望在异步函数中使用它。我希望我可以创建类似 C# TaskCompletionSource 的东西,返回虚拟 Task (Promise) 并作为 jqProm 的处理程序解决/拒绝设置状态的虚拟任务(承诺)

如何做到这一点?我只能找到接受解析器和拒绝器操作的 Promise 构造函数 - 但没有像 PromiseCompletionSource 这样的东西。

【问题讨论】:

  • 在 javascript Promise/A+ 的世界中...什么是 PromiseCompletionSource
  • C#-think 只会混淆视听。 jQuery 3+,什么都不做,promises 已经符合 Promises/A+。 jQuery let promise = Promise.resolve(jQueryPromise).
  • resolvereject 解析器函数 JS 等效于PromiseCompletionSource。但我不确定你需要这个做什么?

标签: typescript promise async-await


【解决方案1】:

jQuery Promise 是thenables,这意味着您可以将它们与原生 Promise 一起使用。他们将隐含地得到Promise.resolved。你需要写的就是

await server.downloadAsync();

【讨论】:

    【解决方案2】:

    我今天亲自遇到了这个问题。 This 应该可以解决问题。

    将 jQuery 承诺转换为 Angular 承诺:

    var angularPromise = $q.when(jQueryPromise); // eg: $q.when($.get(...));
    

    将 jQuery 承诺转换为原生或 Bluebird 承诺:

    var promise = Promise.resolve(jQueryPromise); // eg: Promise.resolve($.get(..));
    

    【讨论】:

      猜你喜欢
      • 2022-01-07
      • 2017-04-04
      • 2015-12-11
      • 1970-01-01
      • 2015-06-06
      • 2021-11-10
      • 2021-12-01
      • 2018-09-19
      • 1970-01-01
      相关资源
      最近更新 更多