await可能存在的问题

字数 220阅读 27

node8 已经开始正式支持asyncawait的特性了,利用这两个特性写出来的代码,逻辑更加清晰了,看上去也更加优雅了。可是,却也会存在一定的问题:

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的时候,当加载静态文件的时候,后面的函数就都会丢失,不会执行,具体看这里)。

推荐阅读更多精彩内容