什么是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
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,所以可以进行链式调用