日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

javascript --- 使用run函数,让100条ajax依次执行

發布時間:2023/12/10 javascript 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 javascript --- 使用run函数,让100条ajax依次执行 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

使用如下:

function *foo(len,urlArray) {let r = [];for(let i =0; i< len; i++){r[i] = yield request(urlArray[i]);} } // len:是長度,urlArray,是請求的url數組..

下面附上run函數的代碼,以及證明以上是成立的

// Benjamin Gruenbaum(@benjamingr on Github) function run(gen) {var args = [].slice.call(arguments, 1), it;it = gen.apply(this, args);return Promise.resovle().then(function handleNext(value) {var next = it.next(value);return (function handleResult(next) {if( next.done) {return next.value;} else{return Promise.resolve(next.value).then(handleNext,function handleErr(err) {return Promise.resolve(it.throw(err)).then(handleResult);}};}})(next);}); } // emmmm,這個run我是沒有看懂的,也不想檢查有沒有打錯....其實我想說的是..利用Promise并發.

考察下面函數:

function *foo(){var r1 = yield request("http://some.url.1");var r2 = yield request("http://some.url.2");var r3 = yield request("http://some.url.3/?v=" + r1 + "," + r2);console.log(r3); } run(foo); // 以上2個ajax請求是依此進行的.即:r1完成后,r2開始... // 高效的程序是讓r1和r2同時進行(并發) // 改寫如下: function *foo(){var p1 = request("http://some.url.1");var p2 = request("http://some.url.2");var r1 = yield p1;var r2 = yield p2;var r3 = yield request("http://some.url.3/?v=" + r1 + "," + r2);console.log(r3); } run(foo);// 同時發出2個ajax請求.使用yield語句等待promise的決議.

這個也很像Promise.all方法

function *foo(){var results = yield Promise.all([request("http://some.url.1"),request("http://some.url.2")]);var r1 = results[0];var r2 = results[1];var r3 = yield request("http://some.url.3/?v=" +r1 + "," +r2);console.log(r3); } run(foo);

更理想的情況是,我們希望使用bar()給我們結果(通過yield來等待),而不關心底層到底是使用Promise.all還是Promise.

function bar(url1, url2) {return Promise.all([request(url1),request(url2)]); }function *foo(){var results = yield bar("http://some.url.1","http://some.url.2");var r1 = results[0];var r2 = results[1];var r3 = yield request("http://some.url.3/?v=" + r1 + "," + r2);console.log(r3); } run(foo); // 使用bar將Promise層封裝起來,不需要關心底層的實現. // 如果將Promise直接放在生成器內部的話,在高層次的任務表達中邏輯會變得混亂

參考《你不知道的JavaScript》(中卷)P256~P261

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的javascript --- 使用run函数,让100条ajax依次执行的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。