JavaScript Promise 实现(三)
来源:互联网 发布:windows 域控 编辑:程序博客网 时间:2024/05/21 22:23
前面我们介绍了 JavaScript 中的 Promise 的简单使用方式和实现原理,但 Promise 除了作为可实例化的类来使用,其本身也包含了许多静态方法,用于处理与之相关的多任务事务。例如,利用 Promise.all 函数,可以传入多个 Promise 对象,当这些对象全部成功完成。那么,这些是如何实现的呢?我们继续以 Promise.all 函数为例,其本质是通过计数器等方式来记录结果,并与输入进行比较,以来判断结果。如下代码,此处就不再过多讲解了。
Promise.all(values) { var args = Array.prototype.slice.call(arguments.length === 1 && Array.isArray(arguments[0]) ? arguments[0] : arguments); return new Promise(function = (resolve, reject) { if (args.length === 0) return resolve([]); var remaining = args.length; var res = function (i, value) { try { // 检查 value 是否为 Promise 对象。 if (value && (typeof value === 'object' || typeof value === 'function') && typeof value.then === "function") { value.then(function (val) { res(i, val); }, reject); return; } // 非 Promise 对象时,即简单赋值。 args[i] = value; // 计数器,以及结束时的处理。 if (--remaining === 0) { resolve(args); } } catch (ex) { reject(ex); } }; for (var i = 0; i < args.length; i++) { res(i, args[i]); } });}
除此之外,还有诸如 Promise.race 这样的函数,相信此处不多说,大家也已明白其实现原理。
【完】
文章类型及复杂度:Web 前端开发进阶。
节选翻译自 MSDN 博文 JavaScript Promise,内容有所调整。
http://blogs.msdn.com/b/kingcean/archive/2016/03/25/promise-in-web.aspx
0 0
- JavaScript Promise 实现(三)
- JavaScript Promise 实现(一)
- JavaScript Promise 实现(二)
- JavaScript之Promise实现
- JavaScript:Defer/Promise轻量级实现
- javascript异步下载 Promise实现
- (转载)Javascript 之 Promise
- 浅谈Javascript中Promise对象的实现
- JavaScript简单实现Promise/A+规范
- 浅谈Javascript中Promise对象的实现
- JavaScript Promise
- javascript promise
- javascript: Promise
- Javascript Promise
- JavaScript Promise
- JavaScript promise 链,并行promise
- es6 javascript的Promise对象(上)
- es6 javascript的Promise对象(下)
- 网狐全局定义,用户数据,更改要慎重!
- 控件使用-注意事项罗列
- Solr6+Suggest(提示)
- Out of memory CheckErrorStatus(Int32 status)
- HDOJ_Easier Done Than Said
- JavaScript Promise 实现(三)
- 骑士
- Qt之QFileIconProvider(根据扩展名获取文件图标、类型)
- 马特-福特无奈为何外界对卡特勒评价糟糕
- jQuery获取Select选中的Text和Value,根据Value值动态添加属性等
- 使用ant打包android生成apk文件
- org.springframework.beans.MethodInvocationException: Property 'cacheManager' threw exception; neste
- hdu5319(模拟)
- C++轻量级界面库DuiLib简介(二)—使用DuiLib