首页 > web前端 > js教程 > 正文

JavaScript中Promise.all和Promise.race方法的介绍(附代码)

不言
发布: 2019-03-15 14:10:10
转载
3822人浏览过

本篇文章给大家带来的内容是关于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 = 3
Promise.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 = 3
all([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方法的介绍(附代码)的详细内容,更多请关注php中文网其它相关文章!

java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:segmentfault网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号