国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

js 宏任務(wù)和微任務(wù)

zollero / 1490人閱讀

摘要:想了解什么是宏任務(wù)和微任務(wù),必須得知道的執(zhí)行順序,是單線程,執(zhí)行時(shí)存在各種任務(wù)隊(duì)列。一些論證討論使用宏任務(wù)和微任務(wù)知識(shí)完成實(shí)現(xiàn)為數(shù)組,因?yàn)榭赡芡瑫r(shí)有很多個(gè)回調(diào)

想了解什么是宏任務(wù)和微任務(wù),必須得知道JavaScript的執(zhí)行順序,JavaScript是單線程,執(zhí)行時(shí)存在各種任務(wù)隊(duì)列。

常見的宏任務(wù)
業(yè)界流行的認(rèn)為,可能個(gè)別瀏覽器有差異
類型 瀏覽器 Node
I/O ? ?
setTimeout ? ?
setInterval ? ?
setImmediate ? ?
requestAnimationFrame ? ?
常見的微任務(wù)
業(yè)界流行的認(rèn)為,可能個(gè)別瀏覽器有差異
類型 瀏覽器 Node
process.nextTick ? ?
MutationObserver ? ?
Promise.then catch finally ? ?
在當(dāng)前的微任務(wù)沒有執(zhí)行完成時(shí),是不會(huì)執(zhí)行下一個(gè)宏任務(wù)的 經(jīng)典例子
setTimeout(_ => console.log(4))

new Promise(resolve => {
  resolve()
  console.log(1)
}).then(_ => {
  console.log(3)
})

console.log(2)
經(jīng)典提問: setTimeout設(shè)置為0的作用
關(guān)鍵就是setTimeout是宏任務(wù),不管延遲設(shè)置為多少還是會(huì)進(jìn)入任務(wù)隊(duì)列。
一些論證、討論

https://www.cnblogs.com/xieex/archive/2008/07/11/1241137.html

http://www.cnblogs.com/silin6/p/4333999.html

使用宏任務(wù)和微任務(wù)知識(shí)完成:promise ES5實(shí)現(xiàn)
function promise(fn) {
    var value = null,
        callbacks = [];  //callbacks為數(shù)組,因?yàn)榭赡芡瑫r(shí)有很多個(gè)回調(diào)

    this.then = function (onFulfilled) {
        callbacks.push(onFulfilled);
        return this;
    };

    function resolve(value) {
        setTimeout(function () {
            callbacks.forEach(function (callback) {
                callback(value);
            });
        }, 0)
    }

    fn(resolve);
}


function test() {
    return new promise(function(resolve) {
        console.log("1");
        resolve();
    })
}

test().then(function(resolve) {
    console.log("2");
}).then(function(resolve) {
    console.log("3");
});

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/109190.html

相關(guān)文章

  • js運(yùn)行機(jī)制-事件循環(huán)EventLoop

    js運(yùn)行機(jī)制-事件循環(huán)EventLoop 先來看看一段js代碼: console.log(script begin) setTimeout(() => { console.log(setTimeout) },0) new Promise((resolve) => { console.log(promise begin) for(let i = 0; i < 1000; i...

    jayce 評論0 收藏0
  • 事件循環(huán)機(jī)制

    摘要:事件觸發(fā)線程主要負(fù)責(zé)將準(zhǔn)備好的事件交給引擎線程執(zhí)行。進(jìn)程瀏覽器渲染進(jìn)程瀏覽器內(nèi)核,主要負(fù)責(zé)頁面的渲染執(zhí)行以及事件的循環(huán)。第二輪循環(huán)結(jié)束。 將自己讀到的比較好的文章分享出來,大家互相學(xué)習(xí),各位大佬有好的文章也可以留個(gè)鏈接互相學(xué)習(xí),萬分感謝! 線程與進(jìn)程 關(guān)于線程與進(jìn)程的關(guān)系可以用下面的圖進(jìn)行說明: showImg(https://segmentfault.com/img/bVbjSZt?...

    Blackjun 評論0 收藏0
  • 事件循環(huán)機(jī)制

    摘要:事件觸發(fā)線程主要負(fù)責(zé)將準(zhǔn)備好的事件交給引擎線程執(zhí)行。進(jìn)程瀏覽器渲染進(jìn)程瀏覽器內(nèi)核,主要負(fù)責(zé)頁面的渲染執(zhí)行以及事件的循環(huán)。第二輪循環(huán)結(jié)束。 將自己讀到的比較好的文章分享出來,大家互相學(xué)習(xí),各位大佬有好的文章也可以留個(gè)鏈接互相學(xué)習(xí),萬分感謝! 線程與進(jìn)程 關(guān)于線程與進(jìn)程的關(guān)系可以用下面的圖進(jìn)行說明: showImg(https://segmentfault.com/img/bVbjSZt?...

    CloudwiseAPM 評論0 收藏0
  • js的setTimeout和Promise---同步異步和微任務(wù)任務(wù)

    摘要:為了最終確認(rèn),進(jìn)行最后一次驗(yàn)證,在第一個(gè)里面多加一層同步新加行新加行新加行新加行新加行新加行同步輸出結(jié)果如下同步同步確認(rèn)完畢,的確是一層一層的執(zhí)行。而是微任務(wù),是宏任務(wù)。 久經(jīng)前端開發(fā)沙場,會(huì)經(jīng)歷各式各樣的需求,處理這些需求時(shí)候,會(huì)使用各種各樣的api和功能,這里集中對setTimeout和Promise的異步功能進(jìn)行討論一下。 單獨(dú)使用的執(zhí)行模式 這里就使用Promise作為例子,...

    stdying 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<