Jquery Deferred 对比 Promise

javascript处理异步逻辑有多种方式,这里只对比 JQuery的Deferred 和 ES6的Promise。场景是判断网页中所有图片是否加载完(加载异常404也算加载完毕)。

JQuery Deferred 方式

 1 var imgdefereds = [];
 2 $('img').each(function () {
 3     var dfd = $.Deferred();
 4 
 5     $(this).bind('load', () => dfd.resolve()) //
 6         .bind('error', () => dfd.resolve());
 7 
 8     if (this.complete)
 9         dfd.resolve()
10 
11     imgdefereds.push(dfd);
12 });
13 
14 $.when.apply(null, imgdefereds).done(() => {
15     console.info("Jquery Deferred 所有图片加载完");
16 });

ES6 Promise

 1 let ps = $("img").map((i, dom) => {
 2     if (dom.complete)
 3         return Promise.resolve("complete");
 4 
 5     return new Promise((resolve, reject) => {
 6         $(dom).bind('load', () => resolve("load")) //
 7             .bind('error', () => resolve("error")) //
 8     });
 9 });
10 
11 Promise.all(ps).then(() => {
12     console.info("Promise 所有图片加载完成")
13 })

 

总结:这两种方式整体来说,Promise更简洁,未来的趋势。

posted @ 2023-05-25 11:04  叶枫声  阅读(29)  评论(0编辑  收藏  举报