JavaScript Promise

49 阅读1分钟

一、Promise 基础

二、链式 Promise

then()catch()finally() 的每次调用,都会创建并返回一个新的 Promise。 只有在前一个的 Promise 被解决之后,后一个的处理器才会被调用。

三、多个 Promise 协同工作

四、异步函数和 await表达式

异步函数和同步函数的区别?

  • 异步函数总是返回一个 Promise类型的值
  • 异步函数抛出的错误总是处于 fulfilled 的Promise
  • 异步函数可以使用 await 关键字
  • 异步函数可以使用 for-await-of 循环

异步函数抛出的错误总是处于 fulfilled 的Promise

因此无法通过 try catch 来捕获错误信息。需要使用 catch 处理器来捕获异常。

async function doSomething() {
    throw new Error('Oh no!')
}

try {
    doSomething()
    console.log("Didn't catch error")
} catch (e) {
    // 无法捕获错误
    console.log("Caught error")
}

// 使用 catch 捕获
doSomething().catch(err => {
    console.log("catch err", err)
})

异步函数可以使用 await 关键字

在 await 表达式中使用的任何 Promise都不需要手动的分配履行处理器和拒绝处理器。awiat 表达式在操作成功时返回Promise履行后的结果值,在操作失败时抛出拒绝后的结果值。如此,可以轻松的将 awiat 的结果值赋给某个变量,并使用 try/catch 语句捕获拒绝值。

五、追踪未处理的拒绝情况