npm 包 @hal313/promiseifyish 使用教程

阅读时长 6 分钟读完

在以前的异步操作中,我们通常使用回调函数来处理异步操作。但是回调嵌套会让代码变得难以维护和阅读。为了解决回调地狱,Promise 出现了。在 Promise 出现后,我们可以通过链式调用来简化异步操作并让代码更加优雅。但是,Promise 的使用过程中也存在问题。比如说需要重复的手动包装函数,比如说没有办法很好地处理一些异步操作的返回值等等。

这时,我们可以使用 npm 包 @hal313/promiseifyish 来更好地使用 Promise。

@hal313/promiseifyish 是什么?

@hal313/promiseifyish 是一个 npm 包,通过它我们可以轻松地将一个普通的函数包装成一个可以返回 Promise 的函数。它的作用不仅仅是将一个函数返回值转换成 Promise,还可以自定义错误处理、回调函数里的参数都会通过 Promise 传递出去。

接下来我们详细介绍如何使用 @hal313/promiseifyish。

安装 @hal313/promiseifyish

你可以通过 npm 安装 @hal313/promiseifyish:

使用 @hal313/promiseifyish

下面我们将以一个示例代码说明如何使用 @hal313/promiseifyish。

假设我们有一个函数如下:

这个函数需要等待 1 秒才输出时间。我们想将这个函数包装成 Promise 版本的,可以这样使用 @hal313/promiseifyish:

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

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

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

上述代码中,打印时间的函数被包装成 Promise 的形式,然后我们就可以通过 Promise 的方式调用该函数,使用 then 和 catch 处理回调函数里的参数。

@hal313/promiseifyish 的更多用法

除了将函数包装成 Promise 之外,@hal313/promiseifyish 还有很多其它用法,下面我们一一介绍。

包装函数时传入 Promise 构造函数

默认情况下,@hal313/promiseifyish 使用 Promise.resolve() 来包装 Promise。但是你可能需要使用 Promise 的别的构造函数,那么可以通过传入 Promise 构造函数来实现:

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

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

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

上述代码中,我们传入了 bluebirdPromise,即将 printTime 包装成 Bluebird Promise 的形式。

自定义错误处理

我们可以使用 @hal313/promiseifyish 自定义错误处理逻辑,使用方法如下:

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

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

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

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

上述代码中,我们定义了一个错误处理函数 errorFilter,如果 printTime 返回 ERRORS.TIME_IS_IN_THE_PAST,那么就会将这个错误过滤掉,否则会将它传递出去。

传入前置参数

如果我们的函数有前置参数,我们想要将这些参数传入,可以这样使用 @hal313/promiseifyish:

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

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

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

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

上述代码中,我们将 'world' 作为 sayHello 的第一个参数传入,这样我们就可以直接使用 Promise 的形式调用 sayHello,而不需要手动传入 'world'。

总结

在 Promise 的使用过程中,我们遇到了一些问题,@hal313/promiseifyish 正是为了解决这些问题而出现的。使用 @hal313/promiseifyish 可以轻松地将普通函数转换为 Promise 的形式,而且可以自定义错误处理、前置参数等,从而使 Promise 的使用更加灵活和优雅。

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

纠错
反馈