跳至主要內容

Promise

Yang大约 4 分钟

Promiseopen in new window


概述

  • Promise 对象用于表示一个异步操作的最终完成 (或失败), 及其结果值

  • 语法:new Promise( function(resolve, reject) {...} /* executor */ );

  • 参数

    • executor:是带有 resolvereject 两个参数的函数

Promise.length

值总是为 1 (构造器参数的数目)


Promise.resolve()open in new window

  • 描述:返回一个以给定值解析后的 Promise 对象
  • 语法:Promise.resolve(reason)
  • 参数
    • value:将被Promise对象解析的参数,也可以是一个Promise对象,或者是一个 thenable
  • 返回值:返回一个带着给定值解析过的Promise对象,如果参数本身就是一个Promise对象,则直接返回这个Promise对象

Promise.reject()open in new window

  • 描述:返回一个带有拒绝原因的 Promise 对象
  • 语法:Promise.reject(reason)
  • 参数
    • reason:表示 Promise 被拒绝的原因
  • 返回值:一个给定原因了的被拒绝的 Promise

Promise.race()open in new window

  • 描述:返回一个 promise,一旦迭代器中的某个promise解决或拒绝,返回的 promise就会解决或拒绝
  • 语法:Promise.race(iterable)
  • 参数
    • iterable:可迭代对象,类似Array
  • 返回值:一个待定的 Promise 只要给定的迭代中的一个 promise 解决或拒绝,就采用第一个 promise 的值作为它的值

Promise.all()open in new window

  • 描述:方法返回一个 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()open in new window

  • 描述:返回一个在所有给定的 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()open in new window

  • 描述:返回一个 Promise
  • 语法:p.then(onFulfilled[, onRejected])
  • 参数
    • onFulfilled:当 Promise 变成接受状态(fulfilled)时调用的函数。该函数有一个参数,即接受的最终结果,如果该参数不是函数,则会在内部被替换为 (x) => x,即原样返回 promise 最终结果的函数
    • onRejected:当 Promise 变成拒绝状态(rejected)时调用的函数。该函数有一个参数,即拒绝的原因(rejection reason)。 如果该参数不是函数,则会在内部被替换为一个 "Thrower" 函数

Promise.prototype.catch()open in new window

  • 描述:返回一个Promise,并且处理拒绝的情况
  • 语法:p.catch(onRejected)
  • 参数
    • onRejected:当Promise 被rejected时,被调用的一个Function。 该函数拥有一个参数
      • reason:rejection 的原因

Promise.prototype.finally()open in new window

  • 描述:返回一个Promise。在promise结束时,无论结果是fulfilled或者是rejected,都会执行指定的回调函数。避免了同样的语句需要在then()和catch()中各写一次的情况
  • 语法:p.finally(onFinally)
  • 参数
    • onFinally:Promise 结束后调用的Function
上次编辑于:
贡献者: sunzhenyang