如果传入的是一个对象 , 并且这个对象也有一个跟Promise
一样的then
方法 , 也就是说这个方也也可以接收到onFulfilled, onRejected
两个回调 , 并且可以调用回调传递参数 , 这种有then
方法的对象实现了一个thenable
的接口 , 支持这种对象的原因是因为原生Promise
还没有被普及之前 , 很多时候都是第三方的库实现的Promise
Promise.resolve({then (onFulfilled, onRejected) {onFulfilled('123')}}).then(ret => {console.log(ret) // 123})
Promise.reject快速创建一个一定是失败的Promise
对象 , 这个方法的参数就是Promise
失败的原因
Promise.reject("嘿嘿 , 这就是错误的理由").catch(err => {console.log(err) // 嘿嘿 , 这就是错误的理由})
Promise.all接收一个数组 , 这些元素都是一个Promise
对象 , 这个方法会返回一个全新的Promise
对象 , 当内部所有Promise
的都完成之后Promise.all
返回的Promise
对象才会完成 。这个时候Promise.all
返回的Promise
对象拿到的结果是一个数组 , 这个数组中包含了每一个Promise
返回的结果 。值得注意的是只有数组中的所有Promise
都成功了结束了 , Promise.all
返回的Promise
对象才会成功结束 。如果数组中有一个Promise
失败的结束了 , 那么Promise.all
返回的Promise
对象也会以失败的结束
Promise.all([ajax('/url1'),ajax('/url2'),ajax('/url3'),ajax('/url4'),]).then(values => {console.log(values)}).catch(err => {console.log(err)})
Promise.race与 Promise.all
方法一样也是接收一个数组 , 这些元素都是一个Promise
对象 , 这个方法会返回一个全新的Promise
对象 , 但是与Promise.all
方法不同的是Promise.all
是等待所有任务的结束而结束,Promise.race
只会等待第一个结束的任务而结束
const request = ajax('/api/???')const timeout = new Promise((resolve, reject) => {setTimeout(() =>reject('timeout'), 5000);})Promise.race([request,timeout]).then(ret => {console.log(ret)}).catch(err => {console.log(err)})
上面代码中 , 如果接口在5秒之前接口返回了 , 那么我们可以正常的得到返回结果 , 如果5秒还没有返回 , 那么请求就没有办法把结果返回回来了 , 因为timeout
这个Promise
会在5秒后以失败的方式结束 , 而Promise.race
就是以第一个结束的Promise
而结束
Promise.allSettled与 Promise.all、Promise.race
方法一样也是接收一个数组 , 这些元素都是一个Promise
对象 , 这个方法会返回一个全新的Promise
对象 , 与他们不同的是无论这些Promise
执行是成功还是失败都是等这些Promise
都完成了之后才会完成 , 当有多个彼此不依赖的异步任务成功完成时 , 或者总是想知道每个promise
的结果时 , 通常使用它
const promise1 = Promise.resolve(3);const promise2 = new Promise((resolve, reject) => setTimeout(reject, 100, 'foo'));const promises = [promise1, promise2];Promise.allSettled(promises).then((results) => results.forEach((result) => console.log(result.status)));// > "fulfilled"// > "rejected"
Promise.any与
经验总结扩展阅读
- 世界上鼻子最长的猴子叫什么
- 恋爱后,仍然会假装单身的星座
- 世界上游得最快的鲨鱼是什么 世界上游得最快的鲨鱼
- 世界动作最慢的动物是哪种 世界上动作最慢的动物排行榜
- 因为深爱,即使被伤害也不愿放手的星座
- 世界上最会伪装的鸟是什么鸟
- 世界上最大的陆龟有多大
- 在爱情里总是委曲求全的星座女都有谁
- 世界最恶心的鼻涕虫叫什么
- 中国最好的土鸡品种有哪些 中国十大上等土鸡品种排行榜