Promise
Promise
Promise的用途
如果异步任务有成功和失败两个结果时,如果想不阻塞程序运行,传统方法有两种:
① 回调接受两个参数:
1 | |
② 使用两个回调分别表示成功和失败
1 | |
传统方法存在以下不足:
Ⅰ. 代码不规范
Ⅱ. 容易出现回调地狱
Ⅲ. 很难进行错误处理
为了解决这些问题,前端程序员提出了Promise思想,制定了Promise/A+规范。
创建Promise
1 | |
任务成功则调用resolve(result)
任务失败则调用reject(error)
resolve和reject再通过then方法
Promise.prototype.then
1 | |
then的第一个参数就是success
then的第二个参数就是fail
举例:
1 | |
Promise.all
Promise.all() 方法接收一个promise的iterable类型(Array,Map,Set)的输入,并且只返回一个Promise实例, 那个输入的所有promise的resolve回调的结果是一个数组。
语法:
1 | |
返回值
- 如果传入的参数是一个空的可迭代对象,则返回一个已完成(already resolved)状态的
Promise。 - 如果传入的参数不包含任何
promise,则返回一个异步完成(asynchronously resolved)Promise。注意:Google Chrome 58 在这种情况下返回一个已完成(already resolved)状态的Promise。 - 其它情况下返回一个处理中(pending)的
Promise。这个返回的promise之后会在所有的promise都完成或有一个promise失败时异步地变为完成或失败。 见下方关于“Promise.all 的异步或同步”示例。返回值将会按照参数内的promise顺序排列,而不是由调用promise的完成顺序决定。
Promise.race
Promise.race(iterable) 方法返回一个 promise,一旦迭代器中的某个promise解决或拒绝,返回的 promise就会解决或拒绝。
语法:
1 | |
参数
返回值
一个待定的 Promise 只要给定的迭代中的一个promise解决或拒绝,就采用第一个promise的值作为它的值,从而异步地解析或拒绝(一旦堆栈为空)。
描述
race 函数返回一个 Promise,它将与第一个传递的 promise 相同的完成方式被完成。它可以是完成( resolves),也可以是失败(rejects),这要取决于第一个完成的方式是两个中的哪个。
如果传的迭代是空的,则返回的 promise 将永远等待。
如果迭代包含一个或多个非承诺值和/或已解决/拒绝的承诺,则 Promise.race 将解析为迭代中找到的第一个值。
版权声明:本文作者为「Andy8421」.本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!