一、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);
})