JavaScript Promise 常见面试题解答

阅读时长 4 分钟读完

什么是 Promise?

Promise 是一种异步编程的解决方案,它解决了 JavaScript 中回调地狱的问题,使得异步代码更加可读、可维护。

Promise 有三种状态:pending、fulfilled 和 rejected。当 Promise 处于 pending 状态时,它可以转化为 fulfilled 或 rejected 状态。当 Promise 转化为 fulfilled 状态时,它会返回一个值;当 Promise 转化为 rejected 状态时,它会返回一个错误信息。

如何创建一个 Promise?

我们可以使用 Promise 构造函数来创建一个 Promise,构造函数接受一个函数作为参数,这个函数又接受两个函数作为参数,分别是 resolve 和 reject,它们分别表示 Promise 成功和失败的回调函数。

Promise 的链式调用是什么?

Promise 的链式调用是指在一个 Promise 成功的回调中返回一个新的 Promise,这个新的 Promise 又可以继续调用 then 方法,实现链式调用。

-- -------------------- ---- -------
-------
  ------------- -- -
    -- -- ---------
    ------ --- ----------------- ------- -- -
      -- -- ---------
      -- --- ---- --- -
        ------------------
      - ---- -
        -----------------
      -
    ---
  --
  ---------------- -- -
    -- -- ---------
  --
  -------------- -- -
    -- ------ -----
  ---

Promise.all 和 Promise.race 是什么?

Promise.all 和 Promise.race 是 Promise 提供的两个方法,它们可以同时处理多个 Promise。

Promise.all 方法接受一个 Promise 数组作为参数,它会等待所有的 Promise 都完成后才返回结果;Promise.race 方法同样接受一个 Promise 数组作为参数,但它会返回最先完成的 Promise 的结果。

-- -------------------- ---- -------
----- -------- - --- ----------------- -- ------------- -- ----------- -------
----- -------- - --- ----------------- -- ------------- -- ----------- -------

---------------------- -------------------------- --------- -- -
  -------------------- --------- -- -- -
---

----------------------- ------------------------ -- -
  -------------------- -- -
---

Promise 的错误处理是怎样的?

Promise 的错误处理可以通过 catch 方法来实现,catch 方法接受一个回调函数,这个回调函数会在 Promise 转化为 rejected 状态时被调用。

Promise 的优缺点是什么?

Promise 的优点:

  • Promise 可以解决回调地狱的问题,使得异步代码更加可读、可维护。
  • Promise 可以进行链式调用,使得代码更加简洁。
  • Promise 可以对多个异步操作进行并行处理,提高代码的执行效率。

Promise 的缺点:

  • Promise 无法取消,一旦创建就会执行,无法中途停止。
  • Promise 无法处理同步任务,必须把同步任务包装在 Promise 中。
  • Promise 会增加代码的复杂度,需要处理错误、链式调用等问题。

总结

通过本文的介绍,我们了解了 Promise 的基本概念、创建方法、链式调用、错误处理、优缺点等内容,这些都是面试中常见的问题,掌握了这些知识点,可以帮助我们更好地应对面试。同时,我们也要注意 Promise 的缺点,合理使用 Promise,避免增加代码的复杂度。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6513e08a95b1f8cacdc54f20

纠错
反馈