在前端开发中,常常需要处理异步操作的代码,例如进行 ajax 请求、读取文件等等,这时候我们需要用到 Promise 对象来进行处理。而在 Promise 对象中,when.js 库就是一个非常好用的工具。当然现在,when.js 已经停止维护,对于一些新项目来说,我们需要寻找一些替代方案。当然可以选择比较流行的 Promise 实现库,例如 Bluebird 或 Q 等等。但是今天我要介绍的是一个比较小众的 Promise 库 —— when-master,它的优点是轻量易用,API 也比较简单。本篇文章就是一份介绍当下使用 when-master 的指南。
安装
使用 when-master 首先需要在项目中安装这个依赖。使用 npm 命令即可完成:
npm install --save when-master
这样我们就可以在项目中使用这个库了。
基础使用
在代码中引入 when-master 库:
import when from 'when-master';
then 方法是 when-master 最核心的方法,通过它我们可以在 Promise 对象中注册回调函数,在 Promise 对象的状态发生改变的时候被调用。比如:
when($.get('api/user')) .then(function(response){ console.log(response); });
可以看出,$.get('api/user') 返回的是 Promise 对象,我们通过 when 传入这个 Promise 对象,等待其返回结果。当 Promise 对象的状态发生改变之后,我们就可以在 then 中获取到返回的结果。当然你也可以通过 catch 方法捕获 Promise 对象中的错误:
when($.get('api/user')) .then(function(response){ console.log(response); }) .catch(function(error){ console.error(error); });
Promise.all
when-master 也支持使用 Promise.all 的形式,用于并行处理多个异步请求。比如:
when.all([ $.get('api/user'), $.get('api/products') ]) .then(function([userData, productsData]){ console.log('user data:', userData); console.log('products data:', productsData); });
Promise.race
另外一个比较实用的方法是 Promise.race,通过它我们可以等待多个异步请求之一先完成。示例:
when.race([ $.get('api/user'), $.get('api/products') ]) .then(function(result){ console.log(result); });
进阶使用
延迟执行
有时我们需要在某些条件达成之后再执行异步请求,这时就可以使用 when.deferred 方法。比如:
-- -------------------- ---- ------- -------- ------------------ - --- -------- - ------------- --------------------- - ------------------- -- ------ ------ ----------------- - -------------------------- -- - ---------------- -- --------- ---- --- ---------- ---
deferred 方法返回的是一个对象,包含有三个方法:resolve、reject 和 promise,其中 promise 就是一个 Promise 对象,我们可以通过调用其方法改变 Promise 对象的状态,让其触发 then 或 catch 方法的执行。
并发限制
在实际项目中,我们可能需要限制并发请求数,避免同时打开过多的请求导致服务器过载。这时可以结合 when-master 提供的 throttle 和 map 方法进行处理。比如限制所有的 ajax 请求最大并发数量为 2:
-- -------------------- ---- ------- ---------------- ------------------- -- - ----------------------- ------ ---------------- -- ----------------------- -------------------- ---
这样当我们在向服务器发送 ajax 请求时,最多只会同时有两个请求在进行中。当某个请求完成后,另外一个会自动开始。
总结
通过以上介绍,相信大家已经可以基本掌握 when-master 的使用了。当然,这里只是对 when-master 的一个简单介绍,详细的 API 及其他高级用法可以参考 官方文档。当然对于一些大型项目而言,可能需要使用更加健壮的 Promise 库,但是对于一些小型的个人项目或者原型开发,when-master 还是一款非常不错的工具。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6006710b8dd3466f61ffe109