node8
已经开始正式支持async
和await
的特性了,利用这两个特性写出来的代码,逻辑更加清晰了,看上去也更加优雅了。可是,却也会存在一定的问题:
Promise
话不多说,上代码
async function render(){
return new Promise((resolve,reject)=>{
setTimeout(()=>{
console.log("end");
})
})
};
async function run(){
console.log("before render");
await render();
console.log("after render");
};
run();
这个代码应该打印什么结果呢?
结果如下
before render
end
奇怪的问题产生了,after end
哪里去了?
细心的同学可能已经发现,render
函数中的Promise
并没有执行resolve
或者reject
方法
这个时候,其实代码执行到console.log("end")
的时候就已经结束了,而不会再向下执行,所以使用的时候要注意(在使用nuxt.render的时候,当加载静态文件的时候,后面的函数就都会丢失,不会执行,具体看这里)。