Javascript 如何将jQuery延迟对象转换为ES6承诺

Javascript 如何将jQuery延迟对象转换为ES6承诺,javascript,jquery,Javascript,Jquery,这是将jQuery转换为Java的正确方法吗 还有其他方法吗 限制是什么?我在某个地方读到jQueryDeferred不支持异常,所以我假设由deferred创建的承诺也不支持异常。这是正确的吗 我不确定这是否有效。我建议: var p = new Promise(function (resolve, reject) { $.getJSON('api/values', null) .then(resolve, reject); }); 最好您可以创建一个适配器函数,如: var t

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

还有其他方法吗


限制是什么?我在某个地方读到jQueryDeferred不支持异常,所以我假设由deferred创建的承诺也不支持异常。这是正确的吗

我不确定这是否有效。我建议:

var p = new Promise(function (resolve, reject) {
  $.getJSON('api/values', null)
    .then(resolve, reject);
});
最好您可以创建一个适配器函数,如:

var toPromise = function ($promise) {
  return new Promise(function (resolve, reject) {
    $promise.then(resolve, reject);
  });
});

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

我更喜欢构图:

const successCb1 = ()=>$.getJSON('api/values'),
successCb2 = (json)=>alert(json),
errorCb = (e)=>alert(e);
Promise
   .resolve()
   .then(successCb1)
   .then(successCb2)
   .catch(errorCb);

是的,Promise.resolve()API支持将表作为参数。因此,传递jquery defer对象就可以了


如果用ES6承诺包装延迟对象,我认为它将支持异常。promise中的代码可以是同步的,也可以是异步的。有没有一种方法可以做到这一点并完全摆脱jQuery。对于移动应用程序来说,避免添加jquery.min.js的开销是很好的。避免使用,只需使用
Promise.resolve
!请记住,只有当您只对第一个jQuery ajax参数感兴趣时,这才有效,也就是说,如果您想要
,那么(function(data,textStatus,jqXhr){}
,这将不起作用,因为
承诺
只支持一个参数。您需要手动将jQuery“promise”转换为
新promise(…)
,并封送其中的参数。
const successCb1 = ()=>$.getJSON('api/values'),
successCb2 = (json)=>alert(json),
errorCb = (e)=>alert(e);
Promise
   .resolve()
   .then(successCb1)
   .then(successCb2)
   .catch(errorCb);