首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将jQuery延迟对象转换为ES6 Promise

如何将jQuery延迟对象转换为ES6 Promise
EN

Stack Overflow用户
提问于 2015-08-24 15:57:55
回答 3查看 10.7K关注 0票数 32

这是将jQuery Deferred转换为Promise的正确方法吗

代码语言:javascript
复制
var p = Promise.resolve($.getJSON('api/values', null));

有没有其他方法可以做到这一点?

限制是什么?我在某处读到过jQuery延迟不支持异常,所以我假设从延迟创建的promise也不支持。这是正确的吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-07-19 08:53:43

应该是这样的,Promise.resolve()接口支持使能作为参数。因此,传递一个jquery defer对象就可以了。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/resolve#Resolving_thenables_and_throwing_Errors

票数 10
EN

Stack Overflow用户

发布于 2015-08-26 00:06:34

我不确定这是否会奏效。我会推荐:

代码语言:javascript
复制
var p = new Promise(function (resolve, reject) {
  $.getJSON('api/values', null)
    .then(resolve, reject);
});

最好是创建一个适配器函数,如下所示:

代码语言:javascript
复制
var toPromise = function ($promise) {
  return new Promise(function (resolve, reject) {
    $promise.then(resolve, reject);
  });
});

var p = toPromise($.getJSON('api/values', null));
票数 10
EN

Stack Overflow用户

发布于 2016-03-31 15:20:25

我更喜欢构图:

代码语言:javascript
复制
const successCb1 = ()=>$.getJSON('api/values'),
successCb2 = (json)=>alert(json),
errorCb = (e)=>alert(e);
Promise
   .resolve()
   .then(successCb1)
   .then(successCb2)
   .catch(errorCb);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32177141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档