为了账号安全,请及时绑定邮箱和手机立即绑定

如何在链接两个异步jQuery函数时完全避开jQuery promises?

如何在链接两个异步jQuery函数时完全避开jQuery promises?

慕容3067478 2019-07-31 10:43:24
如何在链接两个异步jQuery函数时完全避开jQuery promises?我见过很多关于新EMCA承诺的教程,主张避免jQuery库中的“promises”。他们通常说你可以通过做这样的事情来躲避他们:Promise.resolve($.getJSON(url, params)); // voila!  the jQuery promise is "gone"!但是,当我必须将两个异步jQuery函数链接在一起时,这并不真正起作用。如何在不使用jQuery的then()或.when()的情况下将两个getJSON调用(第二个调用依赖于第一个调用)链接在一起?相反,我只想使用Promise.all等。我认为一个类似的问题问题是交叉jquery和EMCA的承诺?
查看完整描述

2 回答

?
饮歌长啸

TA贡献1951条经验 获得超3个赞

JavaScript承诺是可互操作的。您可以根据需要混合使用它们,所有适当的库1和本机承诺都可以接受来自任何地方3的任何实现的thenables 2。如果有外国人出现,他们就会做。Promise.resolve

所以通常你会编写你的代码,好像它们都使用了相同的promise实现,它只是起作用
但是,现在您要确保所有.then方法调用都使用您喜欢的实现; 或者您想使用非标准方法或功能?对于这一点,你必须明确地投下所有的承诺在其上直接调用方法 -而不是其他。

一些例子:

Promise.all([$.ajax(…), $.ajax(…)]).then(…); // just works!
$.ajax(…) // a jQuery promise.then(…)  // so this would be jQuery `then`, which we don't want.
Promise.resolve($.ajax(…)) // explicit cast.then(function(data) {     // native `then`
    return $.ajax(…);      //   just works!})                         // returns a native promise still.catch(…)                  // so we can use its features

1:是的,jQuery是直到3.0版本其中一个
2:所有的jQuery deferreds和承诺是这样thenables,虽然
3:真的无处不在你所期望的一个承诺,在Promise.resolvethen回调的返回值,Promise.all参数,...


查看完整回答
反对 回复 2019-07-31
  • 2 回答
  • 0 关注
  • 420 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信