//Promise 是一个es6的原生对象,从它可以获取异步操作的消息,承诺了未来要发生的事,用来传递异步操作的信息
//Promise 有三种状态 pending等待态 fulfiled成功态 rejected失败态
//一旦promise被 resolve或reject,就不能再迁移其他任何状态 即状态immutable
//promise 的基本过程
//1.初始化Promise状态 pending
//2.立即执行Promise中传入的fn函数,将Promise内部resolve,reject函数作为参数传递给fn,按事件机制时机处理
//3.执行then()注册回调处理数组,then方法可被同一个promise调用多次
//4.Promise里的关键要保证,then方法传入的参数 onFulfilled 和 onRejected,必须在then方法被调用的那一轮事件循环之后的新执行栈执行
//promise用来解决回调地狱,可以支持多个并发的要求,获取并发请求中的数据
//优点
//有了Promise对象,就可以将异步操作以同步操作的流程表达出来,避免层层嵌套的回调函数
//Promise对象提供统一的接口,使得控制异步操作更加容易
//缺点
//无法取消Promise,一旦新建它就会立即执行,无法中途取消
//如果不设置回调函数,Promise内部抛出的错误,不会反应到外部
//当处于pending,无法得知Promise状态
//Promise 用法
//1
//Promise的构造函数接收一个参数:函数,并且这个函数需要传入两个参数
//resolve:异步操作执行成功后的回调函数
//reject:异步操作执行失败后的回调函数
let p = new Promise((resolve, reject) => {
setTimeout(() => {
let num = parseInt(Math.random() * 10);
if (num < 6) {
resolve('111')
} else {
reject('222')
}
}, 1000)
})
//then中传两个参数,then方法可以接受两个回调,第一个是resolve回调,第二个是reject回调
//catch指定reject的回调
p.then(res => {
console.log(res);
}, rej => {
console.log(rej)
}).catch(rej => {
console.log(rej)
});
//then 链式调用
let promiseFunction = function (index) {
return new Promise(resolve => {
setTimeout(() => {
resolve(index)
}, 2000)
})
}
promiseFunction(1).then(res => {
console.log(res);
return promiseFunction(2)
}).then(function (res) {
console.log(res);
})
//Promise.all 方法用于将多个 Promise 实例,包装成一个新的 Promise 实例。
//多个 Promise 任务同时执行。 如果全部成功执行,则以数组的方式返回所有 Promise 任务的执行结果。 如果有一个Promise 任务 rejected,则只返回 rejected 任务的结果。
let Promise1 = new Promise(function (resolve, reject) { })
let Promise2 = new Promise(function (resolve, reject) { })
let Promise3 = new Promise(function (resolve, reject) { })
let pAll = Promise.all([Promise1, Promise2, Promise3])
// 三个都成功,则成功
pAll.then(function () { }, function () { })
//race的用法
//Promise.race([p1, p2, p3])里面哪个结果获得的快,就返回那个结果,不管结果本身是成功状态还是失败状态。
let p1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('success')
}, 1000)
})
let p2 = new Promise((resolve, reject) => {
setTimeout(() => {
reject('failed')
}, 500)
})
Promise.race([p1, p2]).then((result) => {
console.log(result)
}).catch((error) => {
console.log(error) // 打开的是 'failed'
})
promise的介绍和使用
最新推荐文章于 2024-06-10 22:18:41 发布