promise简介

255 阅读2分钟

什么是promise

直接翻译过来,就是“承诺”。你为某人许下承诺,一定要去做某件事,并且不管成功与否,都会告知它这件事的结果。

在我们实际编写代码的过程中,有许多代码执行的操作是比较耗时的,比如说网络资源请求。 同时,还有许多代码需要等待这个资源请求完毕后才能继续执行。这个时候,promise就会派上用场。

如何使用promise

let promise = new Promise((resolve, reject) => {  
    let condition;  
    
    if(condition is met) {    
        resolve('Promise is resolved successfully.');  
    } else {    
        reject('Promise is rejected');  
    }
});

就本质上来讲,promise就是一个对象,由new Promise()创建。

我们把传给 new Promise()的函数称为executor,当new Promise()执行时,executor函数也会执行,executor函数的两个参数resolve, reject是两个回调函数,由 JavaScript 引擎提供,不用自己部署。。

当 executor 函数获得结果时,会出现两种情况

  • reolve(value): 如果我的工作成果完成了,就调用这个函数
  • reject(error): 如果工作失败了,就调用这个函数 总结一下:executor会在promise创建时自动运行执行一项工作,执行完毕后,如果成功了就调用resolve方法,失败了就调用reject方法

promise对象有如下几个属性

  • state:初始值为pending, 然后根据失败与否,会改变为rejected或者是fullfilled
  • result:初始为undefined,然后变为value或者是error

image.png

then() 方法

promise实例生成后,可以用then方法分别指定fulfulled状态的回调函数。 then方法接受一个函数决定如何进行下一步的操作

例如,我们可以直接打印出一些信息

myPromise.then((message) => {  
    console.log(message);
});

then方法的返回值也是一个promise,所以可以进行链式调用

catch() 方法

如果工作失败了,那state就会从pending变成rejected,对于这种状态,我们可以用catch方法决定下一步的行为

catch()方法

myPromise.then((message) => { 
    console.log(message);
}).catch((message) => { 
    console.log(message);
});

catch方法的返回值也是一个promise,所以可以进行链式调用