关于 one-doing-the-rest-waiting 这个 npm 包,它是一款前端异步函数封装工具,可以将异步操作的代码优雅地封装起来。在 Promise 模式下,one-doing-the-rest-waiting 可以自动处理 pending 状态,并阻塞接下来的代码执行,等待当前异步操作的结果。除此之外,在同步模式下,代码执行顺序也会被 one-doing-the-rest-waiting 控制,自动阻塞同步操作,等待异步操作完成后按正常顺序执行。
安装与使用
one-doing-the-rest-waiting 是一个 npm 包,可以通过以下命令安装:
npm install --save one-doing-the-rest-waiting
使用该包,需要先导入:
import waiting from 'one-doing-the-rest-waiting';
使用示例
Promise
在一下例子中,我们用 one-doing-the-rest-waiting 封装了两个异步操作。代码前半部分执行两个异步操作,总时间为 2000ms;后半部分通过 one-doing-the-rest-waiting 控制,等到异步操作完成后按正常顺序执行。
-- -------------------- ---- ------- ----- -- - - ------------------- --- ----------------- -- ------------- -- ----------- ------- -- --------------------- ------------- -- -- - ----- ---- - ----- ------ ------------------ ----- ---- - ----- ------ ------------------ --- -------------------
该代码的输出是:
start 1 2 end
同步
在以下代码中,我们同步执行两个操作,其中第一个操作用 setTimeout 延时 2000ms,第二个操作用 setTimeout 延时 1000ms。这两个操作都在 2000+1000=3000ms 内执行完毕,然后再执行同步操作 console.log。
我们把这两个异步操作,改为使用 one-doing-the-rest-waiting 封装。然后执行同样的同步操作 console.log。此时这两个操作的执行顺序,将受到 one-doing-the-rest-waiting 的控制,而实际执行时间也不会变化。
console.log('start'); waiting(() => { setTimeout(() => console.log(1), 2000); setTimeout(() => console.log(2), 1000); }); console.log('end');
此时输出结果也是:
start 1 2 end
API
waiting(fn)
- fn: Function
- returns: Promise
封装异步操作,返回一个 Promise 对象。
使用该方法时,我们需要将异步代码封装在 fn 函数中,然后将该函数调用作为参数传递给 waiting() 方法中。waiting() 将等待该函数内部的异步操作完成后,按正常顺序执行 fn 函数后续的同步操作。
-- -------------------- ---- ------- ----- --------- - ----- -- -- - ----- --- - ----- ----------- ------ ----------- -- ------------- -- -- - ----- ---- - ----- ------------ ------------------ ---
总结
通过 one-doing-the-rest-waiting,我们能够方便的封装异步操作,并自动控制异步操作的执行顺序和同步操作的阻塞,可以更加优雅、快速的编写异步代码。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/600564a881e8991b448e17ec