日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

javascript - 關于 Promise 異步操作的疑惑,以及如果更優雅的編寫

瀏覽:189日期:2023-02-17 08:36:38

問題描述

這幾天看了翻了很多關于 「promise」相關技術貼,看的是眼花繚,一知半解大概了解其作用。

先說說問題吧,項目中用到最多少就是Ajax,有個很不爽的問題「多條ajax依賴請求」假設: R1 > R2( r1_result ) > R3( r2_result ),最省事的做法全部都同步了吧,結果就是體驗很糟糕,頁面一度假死,loading 也不轉了,使用異步操令人惡心的就是一層套一層的回調,以及后續更多的依賴操作。

生命在于折騰,于是就回到了第一段中各種翻閱,看到某位兄臺對 promise 原理刨析,下面引用這位兄臺中的code,http://malcolmyu.github.io/ma...

function Promise(fn) { var state = ’pending’; var value; var deferred = null; function resolve(newValue) { if(newValue && typeof newValue.then === ’function’) { newValue.then(resolve, reject); return; } state = ’resolved’; value = newValue; if(deferred) { handle(deferred); } } function reject(reason) { state = ’rejected’; value = reason; if(deferred) { handle(deferred); } } function handle(handler) { if(state === ’pending’) { deferred = handler; return; } var handlerCallback; if(state === ’resolved’) { handlerCallback = handler.onResolved; } else { handlerCallback = handler.onRejected; } if(!handlerCallback) { if(state === ’resolved’) {handler.resolve(value); } else {handler.reject(value); } return; } var ret = handlerCallback(value); handler.resolve(ret); } this.then = function(onResolved, onRejected) { return new Promise(function(resolve, reject) { handle({onResolved: onResolved,onRejected: onRejected,resolve: resolve,reject: reject }); }); }; fn(resolve, reject);}

看完我不禁又疑惑了, then( function(){ do... } ),這丫還不是個回調嘛,難道是折騰的意義就是套個語法糖(我不信)。

存在即合理,所以最后怎樣合理使用 promise, 如何更優雅操作ajax流程?順便提下有使用 ( axios fetch.js )感覺如何?

問題解答

回答1:

Promise 就是為了解決異步流程控的而生的,其使用核心就是then方法; then初看起來是很像回調,但then的特質是可以處理異常及鏈式寫法. 打個比方,幾個ajax請求依賴如下:

A1 -> A2; Aa -> Ab;Ab + Ac -> Ad;A2 + Ad -> Ax;

如果用Promise,代碼會很清晰 首先準備好 A1,A2,Aa,Ab,Ac,Ad,Ax 都是根據依賴反回promise對像的函數,我就不寫了 然后可以看Promise表演了:

Promise.all([ A1().then(A2), //A1 -> A2 Promise.all([Aa().then(Ab), //Aa -> AbAc() //Ac ]).then(Ad) //Ab + Ac -> Ad;]).then(Ax,Err) //A2 + Ad -> Ax.then(function(v){//完成})

A1,Aa和Ac沒有依賴,會并發執行,之后會根據依賴完成的情況來繼續, 不論哪一個Ajax出問題,都會觸發最后的Err事來統一處理錯誤; 如果你用回調來寫一下試試,要么效率不好,要么回調方法里加一堆代碼來判斷依賴的情況.

參考代碼:

//首先準備好 A1,A2,Aa,Ab,Ac,Ad,Ax 都是基于回調的異步函數var a2,ab,ac,ad; //用來保存完成情況的變量function runAx(){ if(a2 == undefined || ad == undefined) return; //判斷依賴 Ax(a2,ad,function(e,v){//完成 })}function runAd(){ if(ab == undefined || ac == undefined) return; //判斷依賴 Ad(ab,ac,function(e,v){ad = v;runAx(); })}A1(function(e,v){ A2(v,function(e,v){a2 = v;runAx(); })})Aa(function(e,v){ Ab(v,function(e,v){ab = v;runAd(); })})Ac(function(e,v){ ac = v; runAd();})

上面的代碼沒有去處理error,就這么長了,如果依賴再復雜一點,可以想象代碼量,而且容易寫錯;

回答2:

你的理解基本上對,實際上Promise沒簡化多少,只是減少了嵌套的層級。

所以,終極解決方案就是Async/Await,題主可以去查查看資料。

回答3:

優雅就是一個then接一個then,把回調圣誕樹造型擼直,這就是Promises的貢獻。

我寫程序要七八個回調嵌套,Promises爽的一比。

你覺得then寫法都嫌麻煩,那就不要用咯,用Async/Await

標簽: JavaScript
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
91综合久久爱com| 久久久一本精品| 亚洲精品888| 久久久久99| 日韩电影免费网址| 日本综合字幕| 久久激情网站| 一区二区三区四区日本视频| 国产一区二区三区免费在线| 麻豆高清免费国产一区| 国产精品3区| 精品国产乱码久久久久久1区2匹| 国产欧美日韩一区二区三区四区| 日韩av一级片| 国产伦乱精品| 精品视频一区二区三区四区五区| 精品日本视频| 亚洲a一区二区三区| 欧美成人午夜| 免费观看在线综合色| 91精品麻豆| 韩国女主播一区二区三区| 91亚洲国产| 91精品电影| 日韩美女精品| 久久91视频| 99日韩精品| 青青青国产精品| 国产一区二区三区天码| 亚洲播播91| 欧美在线综合| 国产精品天天看天天狠| av免费不卡国产观看| 激情综合自拍| 五月亚洲婷婷 | 麻豆成人在线| 欧美日韩91| 亚洲一区资源| 久久亚洲美女| 久久伊人久久| 亚洲精品123区| 国产精品视频一区二区三区综合 | 视频福利一区| 蜜臀久久久99精品久久久久久| 日韩国产欧美在线播放| 中文字幕在线视频久| 蜜桃免费网站一区二区三区| 国产精品网在线观看| 偷拍欧美精品| 国产日韩视频在线| 九一成人免费视频| 国产情侣久久| 香蕉久久99| 国产精品对白久久久久粗| 国产在线欧美| 国产精一区二区| 1024精品一区二区三区| 欧美一区免费| 群体交乱之放荡娇妻一区二区| 免费的成人av| 日韩一区二区三区免费播放| 国产亚洲激情| 欧美1区二区| 亚洲经典在线| 精品免费视频| 亚洲精品第一| 欧美日韩一区二区综合| 免费视频一区二区三区在线观看 | 国产网站在线| 亚洲另类av| 国产v日韩v欧美v| 日本一区二区三区视频在线看 | 电影91久久久| 蜜臀av性久久久久蜜臀aⅴ流畅 | 视频一区视频二区在线观看| 国产精品地址| 妖精视频成人观看www| 国产精品igao视频网网址不卡日韩| 精品黄色一级片| 午夜在线视频一区二区区别| 欧美激情视频一区二区三区在线播放| 日韩欧美中文| 国产欧美一区二区三区米奇| 1024精品久久久久久久久| 欧美成人一二区| 蜜臀av一区二区在线免费观看| 黑森林国产精品av| 国产精品videossex久久发布| 99国内精品| 成人在线网站| 久久av中文| 日本不卡视频一二三区| 99精品美女| 国产精选一区| 亚洲精选91| 欧美va天堂| 国产一区二区色噜噜| 日韩有码av| 国产精品三上| 久久天堂成人| 视频在线不卡免费观看| 欧美日本一区| 五月激激激综合网色播| 黑丝一区二区三区| 日韩中文字幕高清在线观看| 国产欧美视频在线| 日韩一区网站| 久久不射网站| 成人av二区| 日韩国产一区二区| 久久中文字幕一区二区三区| 日本成人精品| 综合国产在线| 视频一区在线播放| 视频一区视频二区中文字幕| 婷婷成人综合| 999国产精品999久久久久久| 韩国一区二区三区视频| 美日韩一区二区三区| 91精品日本| 日本不卡一区二区三区| 在线看片一区| 丝袜美腿成人在线| 欧美.日韩.国产.一区.二区 | 黄色日韩精品| 日韩一级精品| 欧美精品自拍| 激情自拍一区| 亚洲午夜久久久久久尤物| 91看片一区| 日韩欧美自拍| 999精品一区| 久久久久久久久久久9不雅视频| 91综合网人人| 成午夜精品一区二区三区软件| 久久精品国产精品亚洲毛片| 免费亚洲一区| 精品国产99| 天堂√8在线中文| 欧美影院三区| av不卡免费看| 亚洲一区二区三区中文字幕在线观看| 国产视频一区三区| 人人爽香蕉精品| 亚洲日本国产| 日韩精品导航| 国产乱码精品一区二区三区亚洲人| 日韩 欧美一区二区三区| 日本精品另类| 欧美a级一区二区| 国产精品久久久久久久久久10秀| 久久久久久一区二区| 国产日韩电影| 亚洲电影在线| 美女网站久久| 欧美偷窥清纯综合图区| 美女免费视频一区| 日本一二区不卡| 国产精品99一区二区| 国产精品日韩久久久| 少妇精品久久久一区二区| 欧美欧美黄在线二区| 国产伦一区二区三区| 精品一二三区| 群体交乱之放荡娇妻一区二区| 午夜欧美精品久久久久久久| 亚洲人亚洲人色久| 精品一区二区三区四区五区| 成人精品天堂一区二区三区| 99国产成+人+综合+亚洲欧美| 亚洲精品无播放器在线播放| 国产极品久久久久久久久波多结野| 国产精品**亚洲精品| 天堂√8在线中文| 老牛国产精品一区的观看方式| 欧美日韩午夜| 亚洲精品.com| 色狠狠一区二区三区| 国产精品99精品一区二区三区∴| 电影天堂国产精品| 在线看片日韩| 久久久久久亚洲精品美女| 欧美成a人免费观看久久| 亚洲一区导航| 国产乱码精品一区二区亚洲| 国产 日韩 欧美一区| 日韩精品一卡二卡三卡四卡无卡| 国产精品久久久久久av公交车 | 精品久久美女| 99香蕉国产精品偷在线观看| 青青国产91久久久久久| 岛国av在线网站| 香蕉久久夜色精品国产| 欧美国产不卡| 欧美综合国产| 福利一区二区三区视频在线观看| 国产亚洲精品v| 精品网站999| 中文字幕一区二区av| 日韩国产欧美一区二区|