如何将jQuery Deferred对象转换为ES6 Promise

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

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

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

有什么限制? 我已经读过某个地方,jQuery延迟不支持exception,所以我假设一个延迟创建的承诺都不会。 它是否正确?

是的,Promise.resolve()API支持thenable作为参数。 所以传递一个jquery延迟对象就可以了。

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

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

 var p = new Promise(function (resolve, reject) { $.getJSON('api/values', null) .then(resolve, reject); }); 

最好你可以创建一个适应器function,如:

 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);