promise
翻译
承诺,诺言;前途,指望;迹象,预示
什么是promise
Promise 对象用于表示一个异步操作的最终完成 (或失败)及其结果值。一个 Promise 对象代表一个在这个 promise 被创建出来时不一定已知的值。它让您能够把异步操作最终的成功返回值或者失败原因和相应的处理程序关联起来。 这样使得异步方法可以像同步方法那样返回值:异步方法并不会立即返回最终的值,而是会返回一个 promise,以便在未来某个时候把值交给使用者。
白话:
promise是一个执行异步操作的对象,promise的实例持有异步操作的结果。
promise的三种状态
- 待定(pending) : 初始状态,既没有被兑现,也没有被拒绝。
- 已兑现(fulfilled) : 意味着操作成功完成。
- 已拒绝(rejected) : 意味着操作失败。
注:
- 对象的状态不受外界影响,只有异步操作的结果,可以决定当前是哪一种状态
- 一旦状态改变(从pending变为fulfilled和从pending变为rejected),就不会再变,任何时候都可以得到这个结果
执行流程
构造方法
const promise = new Promise((resolve, reJect) => {
//许多的操作....
})Promise的构造方法需要传递一个"处理器函数"(executor function)作为它的参数,方法中的第一个参数是成功的回调方法反之第二为是失败的回调方法。在这个方法中可以进行异步操作,操作成功时候调用这个两个方法中的一个可以修改promise的状态(成功/失败)。
使用
Promise构建出来的实例存在以下方法:
- then()
- catch()
- finally()
const promise = new Promise((resolve, reJect) => {
setTimeout(() => {
let date = new Date().getTime()
if (date % 2 === 0) {
resolve(`成功的回调方法,当前的时间为${date}`)
} else {
reJect(`失败的回调方法,当前的时间为${date}`)
}
}, 1000);
})
promise.then(
value => {
console.log(value);
}
).catch(
reason => {
console.log(reason);
})then方法
方法中有两个参数成功方法和失败的方法,分别对应promise构造方法中的两个方法
promise.then(
value => {
console.log(value);
},
reason => {
console.log(reason);
}
)catch方法
可以代替then方法中的第二个参数
promise.then(
value => {
console.log(value);
}
).catch(
reason => {
console.log(reason);
})finally方法
不管promise是成功还是失败状态都会调用该方法
promise.then(
value => {
console.log(value);
}
).catch(
reason => {
console.log(reason);
}).finally(() => {
//操作....
})\