今天看到一道题:
// 继发执行
function wait() { return new Promise(resolve => setTimeout(resolve, 1* 1000) ) } async function main() { // console.time(); const x = wait; const y = wait; const z = wait; console.log(new Date()) await x(); console.log(new Date()) await y(); console.log(new Date()) await z(); console.log(new Date()) //console.timeEnd(); } main();
// 执行此代码时间大概为3s
// 并发执行:
function wait() {
return new Promise(resolve =>
setTimeout(resolve, 1* 1000)
)
}
async function main() {
// console.time();
const x = wait();
const y = wait();
const z = wait();
console.log(new Date())
await x;
console.log(new Date())
await y;
console.log(new Date())
await z;
console.log(new Date())
//console.timeEnd();
}
main();
// 时间为 1s多一点
async:
- 表示异步执行
- 返回值必为promise,即使手写的为普通变量,也会自动包装为promise,如果你写了promise,则已你写的为准。
await:
- 只能写在async函数中,其后面跟表达式。
- 阻塞async函数,不过注意,先执行其后面的,再去阻塞async,然后去执行async外面的同步代码,执行完以后再执行async里面的await+表达式下面的代码
这是一个微任务,不是宏任务哦,因为promise也是微任务。
上面代码中并发执行与继发执行的区别,