同步函數
for (let i = 0; i < 10; i ++) {
setTimeout(() => {
console.log(`${i} ______ ${new Date}`);
},500);
}

發現秒數都是11
異步函數
const fs = require('fs');
const chalk = require('chalk');
const file1 = 'test1.txt';
const file2 = 'test2.txt';
// file1 文件的大小是遠遠大於file2的文件大小
// 異步1
fs.readFile(file1,(err,data)=>{
if(err) {
console.error(err);
return;
}
let async_txt = data.toString();
console.log(async_txt);
console.log(chalk.red('Async1'));
});
// 同步
const data = fs.readFileSync(file1);
let sync_txt = data.toString();
console.log(sync_txt);
console.log(chalk.red('Sync'));
// 異步2
fs.readFile(file2,(err,data)=>{
if(err) {
console.error(err);
return;
}
let async_txt = data.toString();
console.log(async_txt);
console.log(chalk.red('Async2'));
});
你會發現 Async2 不是最后一個打印出來,而是Async1是最后打印的。
從寫法可以看出,異步執行函數(或方法)都含有回調函數。
