Javascript 如何将jQuery延迟对象转换为ES6承诺
这是将jQuery转换为Java的正确方法吗 还有其他方法吗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
限制是什么?我在某个地方读到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);