久久r热视频,国产午夜精品一区二区三区视频,亚洲精品自拍偷拍,欧美日韩精品二区

您的位置:首頁技術(shù)文章
文章詳情頁

JS ES6異步解決方案

瀏覽:106日期:2024-03-30 14:30:45
最初使用回調(diào)函數(shù)

​ 由于最初j s官方?jīng)]有明確的規(guī)范,各種第三方庫中封裝的異步函數(shù)中傳的回調(diào)函數(shù)中的參數(shù)沒有明確的規(guī)范, 沒有明確各個(gè)參數(shù)的意義, 不便于使用。

​ 但是node中有明確的規(guī)范

​ node中的的回調(diào)模式:

1. 所有回調(diào)函數(shù)必須有兩個(gè)參數(shù),第一個(gè)參數(shù)表示錯(cuò)誤,第二個(gè)參數(shù)表示結(jié)果

2. 所有回調(diào)函數(shù)必須作為函數(shù)最后的參數(shù)

3. 所有回調(diào)函數(shù)不能作為屬性出現(xiàn)

es6 異步處理模型

Es6 出現(xiàn)以后, 官方就提出了異步處理的規(guī)范, 提出了一種適用于所有異步場景的處理模型。該模型有:

兩個(gè)階段: 未決unsettled, 已決settled。 三個(gè)狀態(tài): pending掛起狀態(tài) , resolved成功, rejected失敗 總是從未決階段推向已決階段,且已決階段的狀態(tài)不再改變

任務(wù)已決狀態(tài)后可能需要后續(xù)處理,

針對resolved的后續(xù)處理我們稱之為thenable 針對rejected的后續(xù)處理我們稱之為catchable為該異步模型量身打造的API : promise

如何使用promise

Copy

const task = new Promise((resolve, reject) => { // 任務(wù)未決階段代碼 // 立即執(zhí)行 console.log('開始100米長跑'); setTimeout(() => { if (Math.random() > 0.5) { // 成功: 跑完了 // 推向成功 resolve('跑完了'); } else { // 失敗: 腿摔斷了 // 推向失敗 reject('腿摔斷了'); } }, 1000)});task.then((result) => { console.log(result);}).catch((error) => { console.log(error);})

1s 后任務(wù)推向已決, 后續(xù)處理在then 或者 catch中 處理。

注意

pending狀態(tài) =》rejected狀態(tài) :

Copy

1. 調(diào)用reject

2. 代碼執(zhí)行報(bào)錯(cuò)

3. 手動(dòng)拋出錯(cuò)誤

后續(xù)處理函數(shù)一定是異步的,且會(huì)放到微隊(duì)列中,

j s執(zhí)行棧清空后會(huì)先執(zhí)行微隊(duì)列中的任務(wù),微隊(duì)列里任務(wù)清空后才會(huì)執(zhí)行宏隊(duì)列中的任務(wù)。

宏任務(wù)隊(duì)列有:setTimeout,setInterval,setImmediately,I/O,UI render 微任務(wù)隊(duì)列有:promise,process.nexttick,Object.observe(已經(jīng)不用了),Mutation.observe

Async await 是es7新增的promise的語法糖大家也可以了解下,本文只是對promise做了個(gè)概述,要掌握的其他細(xì)節(jié)還有很多

以上就是JS ES6異步解決方案的詳細(xì)內(nèi)容,更多關(guān)于ES6異步解決方案的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: JavaScript
相關(guān)文章:
主站蜘蛛池模板: 西充县| 板桥市| 政和县| 贵州省| 江孜县| 漳浦县| 行唐县| 稷山县| 从江县| 武川县| 渝北区| 张北县| 班玛县| 鄱阳县| 共和县| 微博| 通化市| 怀宁县| 庆云县| 阳江市| 鹰潭市| 弥勒县| 常德市| 米林县| 仙游县| 濮阳县| 甘孜县| 横峰县| 佛坪县| 宁海县| 乳源| 五华县| 章丘市| 托克逊县| 苏尼特右旗| 庆安县| 松原市| 台北市| 合山市| 宝山区| 鸡西市|