Promise 对象用于表示一个异步操作的最终完成 (或失败)及其结果值。
Promise比传统的解决方案回调函数和事件更合理和更强大。可以避免回调地狱
一个Promise必须提供一个 then 方法以访问其当前值、终值和据因。
一个 Promise 必然处于以下几种状态之一:
- 待定(pending): 初始状态,既没有被兑现,也没有被拒绝。
- 已兑现(fulfilled): 意味着操作成功完成。
- 已拒绝(rejected): 意味着操作失败。
一个Promise必须提供一个 then 方法以访问其当前值、终值和据因。
promise.then(onFulfilled, onRejected)回调函数只能执行一次,且返回 promise 对象
Promise的每个操作返回的都是Promise对象,可支持链式调用。
Promise的具体用法如下:
function fn(){
return new Promise((resolve, reject)=>{
成功时调用 resolve(数据)
失败时调用 reject(错误)
})
}
fn().then(success1, fail1).then(success2, fail2)
待定状态的 Promise 对象要么会通过一个值被兑现(fulfilled),要么会通过一个原因(错误)被拒绝(rejected)。当这些情况之一发生时,我们用 promise 的 then 方法排列起来的相关处理程序就会被调用。如果 promise 在一个相应的处理程序被绑定时就已经被兑现或被拒绝了,那么这个处理程序就会被调用,因此在完成异步操作和绑定处理方法之间不会存在竞争状态。
因为 Promise.prototype.then 和 Promise.prototype.catch 方法返回的是 promise, 所以它们可以被链式调用。
因为 Promise.prototype.then 和 Promise.prototype.catch 方法返回的是 promise, 所以它们可以被链式调用。
Promise.all
Promise.all()方法用于将多个 Promise 实例,包装成一个新的 Promise 实例。
Promise.all([promise1, promise2]).then(success1, fail1)
promise1和promise2都成功才会调用success1
Promise.race
Promise.race([promise1, promise2]).then(success1, fail1)
promise1和promise2只要有一个成功就会调用success1