国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

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

如何優雅地寫JS串行異步邏輯

瀏覽:84日期:2024-05-24 08:36:43

隨著現代瀏覽器的不斷發展,相信大家漸漸對ES6中的Promise已經有很多的使用了,其中對Promise.all估計也用的很多。Promise.all就是并行執行多個任務,然后在所有任務成功后觸發then里面的內容,或者任意一個任務失敗后觸發catch里面的內容。

雖然Promise.all非常好用,但它也不是適合所有的場景,最常見的就是有些場景是需要串行的,一個任務列表要按順序依次循環執行,任意一個失敗就不觸發下面的任務。那要實現這樣的功能能怎么寫呢?

最簡單的就是一個個寫

var a = ()=>{return new Promise((resolve, reject) => { setTimeout(resolve, 1000);});}var b = ()=>{return new Promise((resolve, reject) => { setTimeout(resolve, 1000);});}var c = ()=>{return new Promise((resolve, reject) => { setTimeout(resolve, 1000);});}a().then(()=>{ return b()}).then(()=>{ return c()}).then(()=>{ console.log(’after 3 sec’)})

這樣寫。。。真的好挫,更重要的是,有時候需要批量處理一個任務,都是調用同一個函數處理不定長度的數據,這樣寫肯定就不行了,比如要串行請求一串url。首先想到的是一個比較繞的方法,搞個Promise鏈出來,把下一個任務作為參數傳到前一個的then中,如此循環。這種同一個函數不斷循環然后把前一個處理完的值又傳到參數里面,剛好和Array.reduce的思想是一致的,所以可以這么寫:

var urlArr = [’http://www.qq.com’,’http://www.qq.com’,’http://www.qq.com’];function makaPromiseList(dataArr,handler) { return dataArr.reduce((promise, obj) => {return promise.then((ret) => { return handler(obj);}) }, Promise.resolve())}var result = [];function makeRequest(url){ return new Promise((resolve,reject)=>{$.get(url).success((ret)=>{ result.push(ret) resolve(result)}).fail(()=>{ reject()}) })}makaPromiseList(urlArr,makeRequest).then((result)=>{ console.log(result)});

老師不給力啊,理解起來就很繞,還要在閉包外面定義result存數據,用上reduce也覺得有點奇技淫巧,不太美觀啊,能不能寫得更好看點啊。 可以!說起異步方案,Promise是很強,但它還不是最強的,還有Promise的進階版 —— async/await!號稱JS異步的終極解決方案,真不是蓋的,下面就來看看async/await的方案

var urlArr = [’http://www.qq.com’,’http://www.qq.com’,’http://www.qq.com’];function makeRequest(url){ return new Promise((resolve,reject)=>{$.get(url).success((ret)=>{ resolve(ret)}).fail(()=>{ reject()}) })}async function makaPromiseList(dataArr,handler){ var result = []; for(let item of dataArr){var ret = await handler(item);result.push(ret); } return result;}makaPromiseList(urlArr,makeRequest).then((ret)=>{ console.log(ret)});

一個for循環解決串行異步問題,沒有回調沒有嵌套看起來瞬間舒服多了~

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 真实一级一级一片免费视频 | 高清欧美一级在线观看 | 久久院线 | 精品伊人久久久久网站 | 成人免费在线播放 | 欧美大片欧美毛片大片 | 在线观看一区二区三区视频 | 韩国精品视频在线观看 | 国产精品二区页在线播放 | 乱子伦农村xxxx视频 | 亚洲www视频 | 国产一级强片在线观看 | 久久99这里只有精品国产 | 国产一级不卡毛片 | 在线欧洲成人免费视频 | 日韩a毛片免费全部播放完整 | 亚洲美女黄色片 | 日韩欧美一区二区三区不卡在线 | 在线观看国产一级强片 | 国产精品一区二区手机在线观看 | 亚洲自偷 | 美女张开腿让人桶 | 欧美一级看片a免费观看 | 欧美成人免费香蕉 | 日本精品夜色视频一区二区 | 一本色道久久综合狠狠躁 | 51国产偷自视频区视频手机播器 | 亚洲图片国产日韩欧美 | 欧美怡红院免费全视频 | 亚洲成人www | 国产亚洲欧洲一区二区三区 | 在线播放成人高清免费视频 | 国产黄色自拍视频 | 成人免费福利片在线观看 | 欧美日本综合一区二区三区 | 国内精品影院久久久久 | 日本一级特黄特色大片免费视频 | 国产高清在线精品一区在线 | 久草综合网 | 性高湖久久久久久久久 | 红色记忆|