JavaScript同步與異步任務(wù)問(wèn)題詳解
js會(huì)出現(xiàn)異步問(wèn)題場(chǎng)景
- 延時(shí)操作
- 數(shù)據(jù)請(qǐng)求同異步
- promise 異步
- 回調(diào)涵數(shù)(最常見(jiàn)多內(nèi)置涵數(shù)支持接收回調(diào)涵數(shù)來(lái)異步代碼 )
- 事件監(jiān)聽(tīng) 如,click事件等異步
- 訂閱與發(fā)布
今天遇到的問(wèn)題是,請(qǐng)求數(shù)據(jù)時(shí)間太長(zhǎng),會(huì)先執(zhí)行之后的代碼,
初步預(yù)想的解決方法:
- 使用箭頭涵數(shù),使用涵數(shù)的返回值,讓請(qǐng)求與之后的代碼 同步執(zhí)行
- 異步請(qǐng)求修改變成同步
- async/await-Promise-讓異步操作同步執(zhí)行
- 開(kāi)關(guān)涵數(shù)
- 延時(shí)操作
標(biāo)題延時(shí)操作
缺點(diǎn):不知請(qǐng)求數(shù)據(jù)需要多長(zhǎng)時(shí)間,之后的數(shù)據(jù)需要延遲多少時(shí)間展示,是個(gè)問(wèn)題。
function tes0t() { fn1(); fn2(); fn3(); } function fn1() { console.log(1); } function fn2() { setTimeout(function () { console.log(2); }, 1000); } function fn3() { setTimeout(function () { console.log(3); }, 0); } tes0t();
開(kāi)關(guān)涵數(shù)
預(yù)期輸出是:1,2,3,
實(shí)際輸出是:1,3,2,
所以達(dá)不到想要的效果
var kai=false function tes0t() { fn1(); fn2(); fn3(); } function fn1() { console.log(1); } function fn2() { setTimeout(function () { console.log(2); kai= true; }, 1000); // console.log(); } function fn3() { setTimeout(function () { console.log(3); }, 0); } tes0t();
jQuery異步請(qǐng)求設(shè)置為同步請(qǐng)求
是否達(dá)到預(yù)期效果,不知道
$.ajaxSettings.async = false;//同步請(qǐng)求 Global_MBPage.$gt(url, params, function (json) {} $.ajaxSettings.async = true;//異步請(qǐng)求 - 默認(rèn)是異步
使用箭頭涵數(shù),涵數(shù)的返回值,讓請(qǐng)求與之后的代碼 同步執(zhí)行
測(cè)試是可以達(dá)到預(yù)期效果,輸出結(jié)果是1,2,3
function tes0t() { fn1(); fn2(1, 1, () => {fn3();}); } function fn1() { console.log(1); } function fn2(n1, n2, n3) { setTimeout(function () { console.log(2); if (n3) n3.call();//返回值的設(shè)置 }, 1000); } function fn3() { setTimeout(function () { console.log(3); }, 0); } tes0t();
async/await-Promise-讓異步操作同步執(zhí)行
function fn4(){ return new Promise(resolve=>{ setTimeout(function(){ msg='等啥 ' resolve(msg) },1000) }) } async function aC(){ var result = await fn4(); console.log(result); } aC()
// 輸出為‘ 等啥 ’
到此這篇關(guān)于JavaScript同步與異步任務(wù)問(wèn)題詳解的文章就介紹到這了,更多相關(guān)JavaScript同步與異步 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JavaScript DOM元素常見(jiàn)操作詳解【添加、刪除、修改等】
這篇文章主要介紹了JavaScript DOM元素常見(jiàn)操作,包括針對(duì)dom元素的添加、刪除、修改等相關(guān)操作實(shí)現(xiàn)技巧與注意事項(xiàng),需要的朋友可以參考下2018-05-05JavaScript函數(shù)擴(kuò)展與箭頭函數(shù)超詳細(xì)講解
這篇文章主要介紹了JavaScript函數(shù)擴(kuò)展與箭頭函數(shù)的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2022-11-11小程序封裝wx.request請(qǐng)求并創(chuàng)建接口管理文件的實(shí)現(xiàn)
這篇文章主要介紹了小程序封裝wx.request請(qǐng)求并創(chuàng)建接口管理文件2019-04-04淺談使用MVC模式進(jìn)行JavaScript程序開(kāi)發(fā)
這篇文章主要介紹了淺談使用MVC模式進(jìn)行JavaScript程序開(kāi)發(fā),同時(shí)也介紹了一些JavaScript的MVC框架,需要的朋友可以參考下2015-11-11