再谈JS的async/await_js async defer
开发JS的程序员都知道,JS天生异步,耗时函数都是异步回调。有哪些是耗时函数?字面意思,就是耗时间的函数,比如:setTimeout,fetch,fs.readFile等,主线程中不建议使用同步函数。
async/await是把异步变同步?它只是简化异步代码,在函数内部类似同步函数,其实还是异步,用await去等待实现同步的效果。所以他只用在函数内部,这样不会阻碍主线程的运行。
async function main(){
await fetch('https://www.baidu.com');
console.log('Hello World!');
}
main();
console.log('haha');
上面程序会先显示haha后显示Hello World,main函数不会阻塞整个程序的运行。机制类似于某些语言的“协程”利用事件循环机制来处理后续的回调。
JS中还有一种并发运行的方式就是Workers
const worker = new Worker('worker.js');
主线程是master,可以开启多个worker,worker之间是互相隔离的,但可以通过主线程转发消息。Worker是独立线程,所以会消耗更多的系统资源。