Promise
2022年10月14日大约 4 分钟
概述
Promise 对象用于表示一个异步操作的最终完成 (或失败), 及其结果值
语法:
new Promise( function(resolve, reject) {...} /* executor */ );
参数
- executor:是带有
resolve
和reject
两个参数的函数
- executor:是带有
Promise.length
值总是为 1 (构造器参数的数目)
Promise.resolve()
- 描述:返回一个以给定值解析后的 Promise 对象
- 语法:
Promise.resolve(reason)
- 参数
- value:将被
Promise
对象解析的参数,也可以是一个Promise
对象,或者是一个 thenable
- value:将被
- 返回值:返回一个带着给定值解析过的Promise对象,如果参数本身就是一个Promise对象,则直接返回这个Promise对象
Promise.reject()
- 描述:返回一个带有拒绝原因的 Promise 对象
- 语法:
Promise.reject(reason)
- 参数
- reason:表示
Promise
被拒绝的原因
- reason:表示
- 返回值:一个给定原因了的被拒绝的 Promise
Promise.race()
- 描述:返回一个 promise,一旦迭代器中的某个promise解决或拒绝,返回的 promise就会解决或拒绝
- 语法:
Promise.race(iterable)
- 参数
- iterable:可迭代对象,类似Array
- 返回值:一个待定的 Promise 只要给定的迭代中的一个 promise 解决或拒绝,就采用第一个 promise 的值作为它的值
Promise.all()
描述:方法返回一个 Promise 实例
- 此实例在
iterable
参数内所有的promise
都“完成(resolved)”或参数中不包含promise
时回调完成(resolve) - 如果参数中
promise
有一个失败(rejected),此实例回调失败(reject),失败的原因是第一个失败promise
的结果
- 此实例在
语法:
Promise.all(iterable)
参数
- iterable:一个可迭代对象,如 Array 或 String
返回值
- 如果传入的参数是一个空的可迭代对象,则返回一个已完成状态的 Promise
- 如果传入的参数不包含任何 promise,则返回一个异步完成 Promise。注意:Google Chrome 58 在这种情况下返回一个已完成(already resolved)状态的 Promise
- 其他情况下返回一个处理中(pending)的Promise,这个返回的 promise 之后会在所有的 promise 都完成或有一个 promise 失败时异步地变为完成或失败
使用场景:通常在启动多个异步任务并发运行并为其结果创建承诺之后使用,以便人们可以等待所有任务完成。
Promise.allSettled()
- 描述:返回一个在所有给定的 promise 都已经 fulfilled 或 rejected 后的 promise,并带有一个对象数组,每个对象表示对应的 promise 结果
- 语法:
Promise.allSettled(iterable)
- 参数
- iterable:一个可迭代的对象,例如Array,其中每个成员都是Promise
- 返回值
- 一旦所指定的 promises 集合中每一个 promise 已经完成,无论是成功的达成或被拒绝,未决议的 Promise将被异步完成
- 返回的 promise 的处理器将传入一个数组作为输入,该数组包含原始 promises 集中每个 promise 的结果
- 每个结果对象,都有一个 status 字符串。如果它的值为 fulfilled,则结果对象上存在一个 value,果值为
rejected
,则存在一个reason
。value(或 reason )反映了每个 promise 决议(或拒绝)的值
- 使用场景:当有多个彼此不依赖的异步任务成功完成时,或者总是想知道每个promise的结果时,通常使用它
Promise.prototype.then()
- 描述:返回一个 Promise
- 语法:
p.then(onFulfilled[, onRejected])
- 参数
- onFulfilled:当 Promise 变成接受状态(fulfilled)时调用的函数。该函数有一个参数,即接受的最终结果,如果该参数不是函数,则会在内部被替换为 (x) => x,即原样返回 promise 最终结果的函数
- onRejected:当 Promise 变成拒绝状态(rejected)时调用的函数。该函数有一个参数,即拒绝的原因(rejection reason)。 如果该参数不是函数,则会在内部被替换为一个 "Thrower" 函数
Promise.prototype.catch()
- 描述:返回一个Promise,并且处理拒绝的情况
- 语法:
p.catch(onRejected)
- 参数
- onRejected:当Promise 被rejected时,被调用的一个Function。 该函数拥有一个参数
- reason:rejection 的原因
- onRejected:当Promise 被rejected时,被调用的一个Function。 该函数拥有一个参数
Promise.prototype.finally()
- 描述:返回一个Promise。在promise结束时,无论结果是fulfilled或者是rejected,都会执行指定的回调函数。避免了同样的语句需要在then()和catch()中各写一次的情况
- 语法:
p.finally(onFinally)
- 参数
- onFinally:Promise 结束后调用的Function