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

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

javascript - js最好怎么在兩個AJax異步操作之后執行一個新的操作

瀏覽:230日期:2023-03-10 09:45:00

問題描述

今天碰到一個面試問題,就是如果頁面中有兩個異步ajax的操作,因為不確定這兩個異步操作的執行順序,怎么在這兩個操作都執行完再執行一個新的操作,最好的方法是什么?

我當時回答了方法一:嵌套兩個ajax,在第二個ajax的返回函數中執行新的操作。面試官回復:這種方法太矬了。

于是想了下回答方法二:通過定時器setTimeout監聽局部變量,確保兩個異步操作執行完了再執行新操作。 面試官回復:這種方式性能不好,能不能想到一個簡單又更合理的方法。

當時思考未果所以把這個問題放上來尋求最好的方法是什么?歡迎討論指點

問題解答

回答1:

1.Promise 包裝異步ajax操作,2.定義async 函數,3.用await等待promise數據異步獲取完成這一種方法簡潔高效,下面請看我專門給你寫的示例代碼我懶得用ajax獲取數據了,就用settimeout這個函數模擬獲取數據吧,這個函數是異步的,原理效果一樣。

//模擬ajax異步操作1function ajax1() { const p = new Promise((resolve, reject) => {setTimeout(function() { resolve(’ajax 1 has be loaded!’)}, 1000) }) return p}//模擬ajax異步操作2function ajax2() { const p = new Promise((resolve, reject) => {setTimeout(function() { resolve(’ajax 2 has be loaded!’)}, 2000) }) return p}//等待兩個ajax異步操作執行完了后執行的方法const myFunction = async function() { const x = await ajax1() const y = await ajax2()//等待兩個異步ajax請求同時執行完畢后打印出數據 console.log(x, y)}myFunction()回答2:

http://api.jquery.com/jQuery....

回答3:

目前瀏覽器環境中開箱即用的原生方法是 Promise.all。

以調用我的地圖庫 Sinomap Demo 為例,這個頁面中為了加載一張地圖,需要多個同時發起但不能確保返回順序的請求:

中國地形數據

各省份數值 JSON 數據

多種圖表疊加時多種圖表存在多種 JSON 數據需通過不同數據接口返回……

解決方法直接在未打包的 http://sinomap.ewind.us/demo/demo.js 中,示例:

// 封裝地形 GeoJSON 數據接口// 將每個數據接口封裝為一個返回 Promise 的函數function getArea () { return new Promise((resolve, reject) => { fetch(’./resources/china.json’).then(resp => resp.json().then(china => resolve(china)) ) })}// 封裝分色地圖數據接口function getPopulation () { return new Promise((resolve, reject) => { fetch(’./resources/china-population.json’).then(resp => resp.json().then(data => resolve(data)) ) })}// 封裝城市數據接口function getCity () { return new Promise((resolve, reject) => { fetch(’./resources/city.json’).then(resp => resp.json().then(data => resolve(data)) ) })}// 使用 Promise.all 以在三個數據接口均異步成功后,執行回調邏輯Promise.all([getArea(), getPopulation(), getCity()]).then(values => { // 依次從返回的數據接口數組中獲取不同接口數據 let china = values[0] let population = values[1] let city = values[2] // 使用數據 doWithData(china, population, city)})

這樣通過 Promise 不僅實現了回調邏輯的解耦,還實現了基礎的異步流程控制。

回答4:

剛剛看到jquery 的 when 方法,所以給你重寫了一個,不一定有jquery的那么好,但至少能實現效果了,可以在控制臺直接輸入下述代碼試試,我勒個去,寫了我整整半小時。。

function ajax(callback){ callback = callback || function(){}; var xhr = new XMLHttpRequest(); xhr.open('get',''); xhr.onload = function(res){ callback(res) }; xhr.send(null); }var when = (function(){ var i = 0,len = 0,data = []; return function(array,callback){callback = callback || function(){}; len = len || array.length;var fn = array.shift(); fn(function(res){ i++; data.push(res); if(i < len){when(array,callback); } else {callback(data); }}); };})();when([ajax,ajax],function(data){ console.log(data);});回答5:

問下能不能用jQ,能用的話直接:

$.when($.ajax('page1'), $.ajax('page2')).done(function(){});

順帶給個$.when的文檔參考

回答6:

我覺得是Promise的方法 all還是什么的

回答7:

你的問題是有三件事 a,b,c。c要在a和b結束之后再執行。

有很多方法: 比如你說的嵌套法 還有暴力監聽法

這個問題我曾經考慮過,以下是我的解答。

異步發射器

用數組保存如何執行異步操作

注意里面的函數都有個參數 commit ,它是一個函數 用來回傳值。 當ajax成功的時候 把返回值回傳進去就好

// 兩個異步操作 var todos = [ function getUser(commit){ setTimeout(() => { commit({ // 這里是異步結束的時候 利用 commit 把值回傳 name: ’eczn’,age: 20 }, 233); }); }, function getLoc(commit){setTimeout(() => { commit({area: ’某個地方’ });}, 333); }]; 編寫發射器

processors 是 todos 這樣的數據。 cb 是最終回調。

function launcher(processors, cb){ var o = {}; var count = 0; if (processors.length === 0) cb(o); processors.forEach((func, idx) => {func(function commit(asyncVal){ // 這就是commit函數 // 把 asyncVal 的所有屬性合并到 o 上 // ( 利用 Object.keys 獲取對象全部屬性名 ) Object.keys(asyncVal).forEach(key => {o[key] = asyncVal[key]; }); // 計數器自加 count++; // 如果發射器全部發射完畢則調用回調函數 cb 并把 o 作為參數傳遞 if (count === processors.length) cb(o); }); }); }并發他們

執行異步發射器 并提供 最終回調

launcher(todos, function(whereEczn){ // todos 里面存放的異步操作的值由 commit 回調返回 // 全部回調跑完的時候 就會執行當前這段函數 并把期望值返回 console.log(whereEczn); // 按順序輸出 [’name’, ’area’].forEach(key => {console.log(`${key}: ${whereEczn[key]}`); }); });

javascript - js最好怎么在兩個AJax異步操作之后執行一個新的操作

Link

https://eczn.coding.me/blog/%...

回答8:

可以定義個變量a=0,ajax請求成功后在回調里設置a++;然后在兩個回調中均判斷下a==2 執行操作函數

回答9:

設置兩個flag,然后兩個ajax調用同一個回調,在這個回調中判斷兩個flag都為true才執行后續操作。

回答10:

把ajax寫在另一個ajax里面再在回調那里執行

標簽: JavaScript
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品成人3p一区二区三区| 99精品美女| 综合色一区二区| 蜜臀av国产精品久久久久| 尤物tv在线精品| 极品日韩av| 国产精品色网| 四虎在线精品| 国产激情一区| 日韩电影二区| 欧美不卡视频| 丝袜美腿高跟呻吟高潮一区| 日韩一区二区三免费高清在线观看| 亚洲免费毛片| 国产免费播放一区二区| 久久中文精品| 私拍精品福利视频在线一区| 国产一区亚洲| 亚洲视频国产精品| 日韩欧美在线精品| 国产精一区二区| 韩国久久久久久| 日韩视频一区二区三区在线播放免费观看| 三级在线观看一区二区| 青青草精品视频| 成人精品国产亚洲| 午夜电影亚洲| 欧美日韩午夜电影网| 超碰成人av| 一区二区视频欧美| 欧美一区网站| 国产美女高潮在线| 久热re这里精品视频在线6| 久久精品99国产精品| 日韩成人精品一区| 好看不卡的中文字幕| 日本欧美大码aⅴ在线播放| 精品一区二区三区亚洲| 在线日韩电影| 欧美影院精品| 91精品在线观看国产| 亚洲91在线| 欧美aa在线观看| 亚洲精品无播放器在线播放| 美女视频一区在线观看| 久久麻豆精品| 国产亚洲高清一区| 国产99久久| 国产伦精品一区二区三区在线播放| 国产资源在线观看入口av| 亚洲一区二区网站| 免费在线日韩av| 亚洲激情中文在线| 美女精品视频在线| 免费中文字幕日韩欧美| 国产成人在线中文字幕| 亚洲一区二区小说| 国产高潮在线| 日韩av中文字幕一区二区三区| 日韩欧美一区二区三区免费看| 亚洲精品一级| 91精品一区二区三区综合| 国产一区 二区| 五月天久久777| 久久精品一区| 欧美在线综合| 麻豆理论在线观看| 91免费精品国偷自产在线在线| av在线日韩| 国产精品玖玖玖在线资源| 99国产精品99久久久久久粉嫩| 精品亚洲精品| 日本少妇精品亚洲第一区| 美女久久久久| 国产videos久久| 97精品资源在线观看| 国产一区清纯| 不卡专区在线| 国产欧美高清| 免费看黄色91| 日韩一区欧美| 久久中文字幕一区二区三区| 亚洲精品极品| 亚洲欧美激情诱惑| 久久久国产亚洲精品| 国产精品99精品一区二区三区∴ | 久久精品亚洲人成影院| 国产精品久久久久久久久免费高清| 欧美日韩精品一本二本三本| 精品国产午夜肉伦伦影院| 日韩一区精品字幕| 91精品一区二区三区综合| 国产一区2区| 国产精品亚洲四区在线观看| 一区二区三区国产在线| 午夜欧美精品久久久久久久| 成年男女免费视频网站不卡| 国产精品毛片久久久| 婷婷视频一区二区三区| 亚洲一本视频| 99久久亚洲精品蜜臀| 国产h片在线观看| 精品久久网站| 美女国产精品久久久| 国产丝袜一区| 日韩精品免费视频人成| 亚洲一区二区免费在线观看| 欧美伊人久久| 亚洲欧洲另类| 亚洲性色视频| 久久久久中文| 久久三级福利| 99久久婷婷| 日韩成人亚洲| 欧美成a人国产精品高清乱码在线观看片在线观看久 | 国产剧情一区| 日韩动漫一区| 日本免费新一区视频| 日本免费一区二区视频| 亚洲精品大片| 日韩中文字幕视频网| 亚洲另类黄色| 日本亚洲不卡| 91综合久久爱com| 国产探花在线精品一区二区| 国产亚洲精aa在线看| 国产精品一国产精品| 国产精品成人**免费视频| 国产精品亲子伦av一区二区三区 | 亚洲女同中文字幕| 亚洲免费黄色| 在线国产精品一区| 亚洲精品一级二级三级| 日本a级不卡| 国产日产高清欧美一区二区三区| 久久国产精品免费精品3p | 高清一区二区三区av| 午夜影院一区| 日韩福利一区| 亚洲高清不卡| 免费日本视频一区| 日韩av在线免费观看不卡| 国产精品99精品一区二区三区∴| 麻豆精品av| 秋霞国产精品| 久久香蕉精品| 国产日产精品_国产精品毛片 | 高清av不卡| 亚洲高清久久| 亚洲色图综合| 国产精品黄色| 日韩毛片视频| 蜜桃伊人久久| 国产欧美精品| 日本欧美不卡| 久久国产精品久久久久久电车| 亚洲免费资源| 久久久国产精品网站| 日韩国产综合| 久热综合在线亚洲精品| 日韩欧美另类中文字幕| 麻豆精品av| 蜜桃视频欧美| 日韩精品午夜视频| 国产成人a视频高清在线观看| 欧美精品一二| 日韩av网站在线观看| 色一区二区三区四区| 亚洲免费精品| 国产欧美日韩影院| 日韩精品免费一区二区在线观看 | 粉嫩av一区二区三区四区五区 | 高清av一区| 免费成人性网站| 风间由美中文字幕在线看视频国产欧美| 亚洲精品一区二区在线看| 久久成人av| 久久成人国产| 久久亚洲资源中文字| 99热免费精品| 久久中文欧美| 日韩在线观看一区二区| 91亚洲国产| 日韩精品亚洲专区在线观看| 亚洲综合在线电影| 日韩毛片一区| 亚洲一级黄色| 久久wwww| 美女被久久久| 欧美成人a交片免费看| 亚洲精品第一| 神马日本精品| 国产欧美日本| 亚洲女同中文字幕| 久久亚洲人体| 亚洲精品黄色| 久久久国产精品一区二区中文| 亚洲免费成人av在线| 日韩av成人高清| 超碰成人av|