目的

JavaScript由于基于事件回调,所以很容易出现复杂的嵌套回调。那么如何解决回调,让回调看起来像是同步代码呢?

详解

我们经常会用到以下代码来定时执行程序。同时又需要在延时之后执行某些逻辑。

setTimeout(function(){
    console.log("延时事件开始");
},2000);

console.log("延时事件完成");

但是以上代码最后执行结果并不如人意,执行结果如下。

延时事件完成
延时事件开始

如何解决这个问题呢?在ES6中,我们有一个新的语法: Promise

以上代码可以用promise重写为:

await new Promise(function(resolve,reject){
    setTimeout(function(){
        console.log("延时事件开始");
        resolve();
    },2000);
});
console.log("延时事件完成");

这样就可以做到等待执行完成。

原理

Promise声明了一个回调对象,通过await关键字,等待回调对象内部执行完毕。

声明promise的参数是一个function,这个function包含两个参数,resolve、reject。 当程序运行完毕时,调用resolve,失败时调用reject。会抛出异常。

登陆后可发表回复评论点击登录