递归调用异步 API 调用

2023-12-23

我正在尝试从每次调用仅返回 1000 个项目的 API 中获取数据,并且我想递归地执行此操作,直到获得所有数据。

我事先不知道总共有多少件物品,所以每次打电话后我都必须检查

如果调用是同步的,我会使用如下内容:

function fetch(all, start) {
    const newData = getData(start, 1000);
    all = all.concat(newData);
    return (newData.length === 1000) ? fetch(all, all.length) : all;
}

但是,那getData()这里的调用是异步的。用一个Promise.all()不起作用,因为我事先不知道需要多少个调用,所以我无法准备一组调用。

我感觉我可以用发电机或用async/await但我不知道怎么做。有人能指出我正确的方向吗?

为了以防万一,我使用 Angular 4。


这取决于您的情况是如何完成的。考虑到getData返回一个承诺,它是:

async function fetch(all, start) {
    const newData = await getData(start, 1000);
    all = all.concat(newData);
    return (newData.length === 1000) ? await fetch(all, all.length) : all;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

递归调用异步 API 调用 的相关文章

  • Ext JS - 如何滚动到文本区域的底部

    这是我下面的代码 如何滚动到文本区域的底部 它一定是类似的东西 Ext getCmp output setScrollPosition Ext getCmp output getScrollHeight 这是我的文本区域代码 var myW
  • 如何通过 HTML 按钮播放声音

    我目前通过网站播放音乐的方法是通过 HTML 音频标签 不过我希望能够通过 HTML 按钮来播放它 该按钮应该能够在播放和停止之间切换音乐 我在 JSFiddle 创建了一个示例 但不知道如何实现它 有人可以告诉我如何使用我的 JSFidd
  • 在浏览器中语音聊天? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我们正在寻求建立一个小组 voice 使用服务器上的node js 在浏览器中聊天 这可能吗 如果您希望您的解决方案是基于服务器端和客
  • 将音频与视频流合并 Node.js

    我正在创建 YouTube 视频下载器并且正在使用ytdl core库 它无法下载带有音频的高质量视频 因为 youtube 将其放在另一个文件中 但我需要将其全部下载到一个文件中 我已经这样做了 app get download asyn
  • 角度 - 传递管道作为变量

    如何存储和使用变量中的管道信息 我已经搜索了很多 但找不到解决方案 我想要实现的是将任何有效的管道信息作为变量 小数 百分比 日期 自定义等 传递 下面是一个简单的例子 父组件 ts columnsDef value 0 35 pipeIn
  • 保存/导出Chrome的JavaScript控制台输入历史记录

    无论如何 我可以保存或导出 JavaScript 控制台的历史记录吗 input 控制台历史记录 在 Google Chrome 中 我不想保存输出或错误 因此将鼠标悬停在控制台框上 右键单击并选择Save as 不是解决方案 我不想每次都
  • 如何记录返回的事件发射器

    如何记录所发出的事件stream返回于MyFunc 与 JSDoc MyFunc description param Object opts description return Stream description function My
  • JavaScript 动画平滑滚动

    默认情况下 当您有这样的片段链接时 a href some url some fragment some text a 浏览器立即向下滚动到该片段 我该如何编程才能使用标准 JS 顺利地向下移动到该片段 这是一个例子 Example htt
  • Aptana Studio 3 上的预览选项卡在哪里?

    我在 Windows PC 上使用 Aptana Studio 2 并有一个选项卡用于在 IE 上预览页面 另一个选项卡用于在 Firefox 上预览 但我切换到了 Aptana 3 我不知道是没有预览还是我没有找到它 是的 我在 stac
  • KeyboardEvent.keyCode 已弃用。这在实践中意味着什么?

    根据 MDN 我们绝对应该not正在使用 keyCode财产 它已被弃用 https developer mozilla org en US docs Web API KeyboardEvent keyCode https develope
  • 使用 jquery 将字符串数组转换为整数

    我正在尝试将 jquery 中的字符串数组转换为整数数组 这是我的尝试 var cdata data values split each cdata function i l l parseInt l 我认为在这种情况下你不需要使用 Jqu
  • 如何滚动到div内的元素?

    我有一个滚动的div我想在点击它时发生一个事件 它会强制执行此操作div滚动以查看内部元素 我写的JavasCript是这样的 document getElementById chr scrollIntoView true 但这会在滚动时滚
  • 如何将 Browserify 与外部依赖项一起使用?

    我正在尝试慢慢地将 Browserify 引入我的网站 但我不想重写所有 js 也不希望 jquery 和其他库的重复实例与我的 Browserify 版本捆绑在一起 如果我构建将 jquery 列为外部依赖项的模块 那么如何将其指向我的全
  • React无限滚动scrollableTarget动态获取id?

    我在我的项目中使用react infinite scroll component 如何让scrollableTarget动态获取item id 我试过这样scrollableTarget item id 但它不起作用 必须与该 div 具有
  • Jquery:选择菜单以显示和隐藏某些div元素

    我正在创建一个选择菜单 根据所选选项显示和隐藏某些 div 像这样的东西
  • 加载另一个 JS 脚本后加载

    这是我的代码 very big js file lots of html stuff 问题是 这些是异步加载的 有没有办法等待第二个脚本直到第一个脚本加载 如果您使用 jQuery 有一个非常简单的方法可以通过获取脚本 https api
  • ng-model 和值组合不适用于输入文本框

    我有两个输入文本框 我需要组合在两个文本框中输入的值并将其显示在第三个文本框中 如果我只使用value在第三个文本框中 Box 1
  • React Native - 跨屏幕传递数据

    我遇到了一些麻烦react native应用程序 我不知道如何跨屏幕传递数据 我意识到还有其他类似的问题在 SO 上得到了回答 但是这些解决方案对我来说不起作用 我正在使用StackNavigator 这是我的设置App js file e
  • 我可以使用 jQuery 动态创建文件(及其内容)吗? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 这是我的 HTML 代码 ul li
  • 如何调试 Gulp 任务?

    如何调试我的中定义的 gulp 任务gulpfile js使用诸如 Google Chrome 调试器之类的调试器逐行单步执行任务的代码 对于 Node js 6 3 版本 您可以使用 inspect flag https nodejs o

随机推荐

  • qDebug() 的错误输出(UTF - 8)

    我正在尝试存储带有特殊字符的字符串 qDebug lt lt ABCg 输出 这里我什至无法输入正确的输出 在 之后缺少一些垃圾 ABCg 我怀疑有一些 UTF 8 Latin1 ASCII 但找不到输出到控制台 文件的设置 我在代码中写的
  • 为什么每次重新部署时都需要刷新连接池?

    我已经通过 Glassfish 成功连接到远程 MySQL 服务器 但是每次更改代码或 XHTML 文件时 我都需要打开 Glassfish 的管理员面板并刷新连接池 否则会出现以下错误我只是刷新页面 有人经历过这个吗 如果需要的话我可以发
  • 从非主线程绘制到主窗体画布

    我正在尝试为我的学校项目制作一款街机游戏 基本思想是在主线程之外的其他线程中完成所有数学和绘图 并且仅将主线程用于输入例程 绘图是通过保存在外部单元中的过程完成的 并且是通过创建位图 然后在位图上绘制部分环境 最后在主窗体的画布上绘制位图来
  • RoundRobin 函数方法 - 为什么我的函数有副作用?

    客观的 我正在尝试创建一个循环算法 https en wikipedia org wiki Round robin scheduling https en wikipedia org wiki Round robin scheduling
  • 覆盖查询集的更新方法 - Django

    我们如何更改 django 中查询集的 update 方法的默认过程 因为它不会为每个对象调用 save 方法 由于我已经重写了 save 方法 因此每次更改对象时都需要调用它 我寻找Django 文档 https docs djangop
  • AntiXSS JavaScriptEncode 获取 HTML 编码?

    我刚刚开始使用 AntiXSS 4 3 0 主要是为了使用 Encoder JavaScriptEncode如上所述here http weblogs asp net jongalloway preventing javascript en
  • 如何在默认范围内按相关型号订购? -- 轨道 3.1

    如何编写以下默认范围 class SimilarMerchant lt ActiveRecord Base relationships belongs to merchant belongs to similar merchant fore
  • Java swing 禁用窗口

    I would like to disable the window in my swing application here is a picture to demonstrate what I mean My paint skills
  • jBPM 5:数据库表脚本在哪里?

    我在 JBPM 5 4 中创建了一个关于持久性的简单示例 它运作成功并且 记录已成功插入到创建的架构中的表中 但我的问题是 虽然该表是在架构中创建的 但它还创建了其他三个表 节点实例日志 变量实例日志 进程实例日志 但是创建这些表的脚本在哪
  • 通过Python创建文件和目录

    我在创建目录然后打开 创建 写入指定目录中的文件时遇到问题 我似乎不清楚原因 我正在使用 os mkdir 和 path chap name print Path chap path For debugging purposes if no
  • 使用http而不是https的redirect_uri

    我正在使用 spring stack Spring Boot 2 0 1 RELEASE 来创建一个通过 OAuth2 将用户身份验证 注册委托给 Facebook 的网站 当我单击 使用 facebook 登录 按钮时 我会被重定向到 F
  • jQuery 查找并替换第二个

    我想知道如何查找和替换 div 中的某些文本 但我想查找并替换该文本的第二次出现 例如 您刚刚添加了一个项目 请删除该项目 所以我想找到第二个 项目 并将其替换为我选择的任何文本 JS var compareCount compareWid
  • SQL日期格式和引用混乱

    我有以下测试记录 以下查询结果为 0 条记录 SELECT FROM events dates WHERE start date 21 12 2014 但以下查询结果为 1 条记录 SELECT FROM events dates WHER
  • 用 | 分割字符串java中的分隔符

    我有一个像这样的字符串 1 value 我想拆分该字符串并选择 作为分隔符 我的代码如下所示 String separated line split 我得到的是一个包含所有字符作为一个条目的数组 separated 0 separated
  • 为什么FolderBrowserDialog对话框不滚动到选定的文件夹?

    如该屏幕截图所示 所选文件夹不在视图中 需要向下滚动才能查看所选文件夹 同一对话框显示在不同计算机上可见的选定文件夹 我在两台装有 Windows 7 的计算机上运行它 它在一台计算机上运行正常 但在第二台计算机上运行不正常 它看起来与 W
  • 应用程序委托 - Cocoa

    我想将 applicationDidFinishLaunching 合并到我的可可委托中 我该怎么做 在 iphone SDK 上 applicationDidFinishLaunching 已经在应用程序委托中 但在制作我的 mac 应用
  • 如何对数据进行分箱以删除低计数?

    我想出于保护隐私的目的使用装箱来处理数据 数据涉及数字整数 并且必须以频率高于最小值的方式进行分箱 x 我还想最小化垃圾箱的宽度 以尽可能多地保留数据 最小化 bin 的宽度并没有严格定义 因为这只是避免不必要的数据丢失的一般目标 由于整数
  • 使用 SkiaSharp 调整大小时 iPhone 图像方向错误

    我在 Xamarin Forms 项目上使用 SkiaSharp 中的 SKBitmap Resize 方法来调整图像大小以供显示 我遇到的问题是在 iOS 上拍照时 当纵向拍摄照片时 图像显示为右侧朝上 在 Android 上拍照 从 A
  • 如何在jasper报告中使用divide()方法?

    我使用 iReport1 3 3 工具创建 pdf 和 xls 模板 我的问题是下面的表达式 V strloanNo divide V loanCalculation 我需要除以两个变量 但我没有得到预期的结果 它显示 null 值 大家有
  • 递归调用异步 API 调用

    我正在尝试从每次调用仅返回 1000 个项目的 API 中获取数据 并且我想递归地执行此操作 直到获得所有数据 我事先不知道总共有多少件物品 所以每次打电话后我都必须检查 如果调用是同步的 我会使用如下内容 function fetch a