after函數的實現及其應用場景

一、after的實現原理,使用定時器來實現。

// after  在...之後
//  我希望我調用某個函數  3次之後 再去執行

function after(times,say){
    return function(){
        if(--times==0){
            say();
        }
    }
}
let newSay=after(3,function(){  //保存一個變量,在after中的內部
    console.log('say')
});

newSay();
newSay();
newSay();

//異步併發問題!我同時發送多個請求, 我希望拿到最終的結果, {name,age,address}

 二、after的應用場景,在node讀取文件,兩次執行併發輸出

// Promise.all 
const fs=require('fs');   //file system   異步的api
// 異步要等待同步代碼執行完畢之後,才執行。
// node 中異步方法都有回調,併發同時讀取文件,讀取完畢的時機不一樣。
// 併發操作,就是兩個操作,互不影響
// 併發的解決核心,定時器來維護
function after(times,say){
    let renderObj={}
    return function(key,value){
        renderObj[key]=value;
        if(--times==0){
            say(renderObj);
        }
    }
};
let out=after(2,(renderObj)=>{
    console.log(renderObj);
})
fs.readFile('name.txt','utf8',function(err,data){
    out("name",data);
})
fs.readFile('age.txt','utf8',function(err,data){
    out("age",data);
})

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章