本篇文章给大家带来的内容是关于javascript中promise.all和promise.race方法的介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
Promise.all() 方法接受一个包含 Promise 对象或普通值的数组(或其它可迭代对象)作为参数,并返回一个 Promise。当所有 Promise 对象都 resolve 后,将所有 resolve 值以数组形式作为 Promise.all() resolve 的结果。如果其中之一的 Promise 被 reject,立即以第一个 reject 的值作为 Promise.all() reject 结果。
在实际应用中,如果需要从几个接口获取数据,并且要在所有数据到达后才执行某些操作,就可以使用Promise.all()。
const p1 = new Promise(function (resolve) { setTimeout(resolve, 200, 1) })const p2 = Promise.resolve(2)const p3 = 3Promise.all([p1, p2, p3]).then(function (res) { console.log(res) }) // [1,2,3]
登录后复制
以下是代码实现,需要一个计数器,来确认所有 promise 对象都已经 resolved,之后返回结果。需要一个数组,按顺序记录返回结果。如果使用类似 for (var i = 0; i
const all = function (iterable) { return new Promise(function (resolve, reject) { let count = 0, ans = new Array(count) for (const i in iterable) { const v = iterable[i] if (typeof v === 'object' && typeof v.then === 'function') { v.then(function (res) { ans[i] = res if (--count === 0) resolve(ans) }, reject) count++ } else { ans[i] = v } } })}const p1 = new Promise(function (resolve) { setTimeout(resolve, 200, 1) })const p2 = Promise.resolve(2)const p3 = 3all([p1, p2, p3]).then(function (res) { console.log(res) }) // [1,2,3]
登录后复制
同 Promise.all(),Promise.race() 方法接受一个包含 Promise 对象或普通值的数组(或其它可迭代对象)作为参数,并返回一个 Promise。一旦其中之一的 Promise 对象 resolve 以后,立即把 resolve 的值作为 Promise.race() resolve 的结果。如果其中之一的对象 reject,Promise.race也会立即 reject。
立即学习“Java免费学习笔记(深入)”;
在实际应用中,如果可以从几个接口获取相同的数据,哪个接口数据先到就先用哪个,就可以使用Promise.race(),所需时间等于其中最快的那个接口。下面是代码:
const race = function (iterable) { return new Promise(function (resolve, reject) { for (const i in iterable) { const v = iterable[i] if (typeof v === 'object' && typeof v.then === 'function') { v.then(resolve, reject) } else { resolve(v) } } })}const p1 = new Promise(function (resolve) { setTimeout(resolve, 200, 1) })const p2 = new Promise(function (resolve) { setTimeout(resolve, 100, 2) })race([p1, p2]).then(function (res) { console.log(res) }) // 2
登录后复制
以上就是JavaScript中Promise.all和Promise.race方法的介绍(附代码)的详细内容,更多请关注【创想鸟】其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。
发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2732507.html