问题描述
async中的await后面的微任务是否应该先于async中settimeout中的宏任务先行完成呢?
问题出现的环境背景及自己尝试过哪些方法
实际结果是顺序完成的,为什么不是所有微任务完成后再运行宏任务呢?
相关代码
let fs = require('fs')
function writeFs(path,content){
return new Promise(function(resolve,reject){
fs.writeFile(path,content,{flag:"a",encoding:"utf-8"},function(err){
if(err){
//console.log("写入内容出错")
reject(err)
}else{
resolve(err)
console.log(content)
}
})
})
}
async function writeList(){
await writeFs('lc.html',"<h1>1今天吃烧烤</h1>");
setTimeout(()=>{console.log('test122222223')},0)
await writeFs('lc.html',"<h1>2今天吃烧烤</h1>");
await writeFs('lc.html',"<h1>3今天吃烧烤</h1>");
await writeFs('lc.html',"<h1>4今天吃烧烤</h1>");
}
writeList()
你期待的结果是什么?实际看到的错误信息又是什么?
实际运行结果:
<h1>1今天吃烧烤</h1>
test122222223
<h1>2今天吃烧烤</h1>
<h1>3今天吃烧烤</h1>
<h1>4今天吃烧烤</h1>
我预期的结果:
<h1>1今天吃烧烤</h1>
<h1>2今天吃烧烤</h1>
<h1>3今天吃烧烤</h1>
<h1>4今天吃烧烤</h1>
test122222223
等等,Promise.then 注册的回调是微任务,但是 fs.writeFile 不是啊。
你要是在 writeFs 里直接 console.log 然后直接 resolve 那就是你要的效果,即微任务比 setTimeout 宏任务优先处理。