Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >fileId未正确循环

fileId未正确循环
EN

Stack Overflow用户
提问于 2017-12-27 22:52:41
回答 2查看 46关注 0票数 0

快速解释一下这个代码块:我有一个files对象,它是我上传的所有文件,然后我还有一个signedUrls对象,它包含来自之前S3函数的所有带签名的URL。这些对象具有匹配的索引。

第一个axios.put上载文件,第二个axios.post将文件密钥保存到我的数据库。(除非上传成功,否则我不想将其保存到我的数据库中,因此axios.post在回调中的位置。)

文件上传得很好,但是fileId没有正确循环,通常会反复保存相同的fileId。也就是说,如果我上传了五个文件,它们会上传到S3,但它们在我的数据库中都有相同的id。知道为什么会发生这种情况吗?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
fileIds = {"1": "someFileId", "2": "someOtherId" }    

for (let i = 0; i < files.length; i++) {
  axios.put(signedUrls[i], files[i], config).then(res => {
    axios.post('https://myapi.com/add-file', {
      fileId: fileIds[i]
    }).then(res => {
      // success
    });
EN

回答 2

Stack Overflow用户

发布于 2017-12-27 23:41:29

这是因为您正在同步for循环中进行异步调用。

在调用post请求时,您的循环已经完成。

你可以使用Promise.all来解决这个问题:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const promises = files.map((file, i) => {

  // create a new promise with correct index, but don't call it yet
  return new Promise((resolve, reject) => {
    return axios.put(signedUrls[i], file, config)
    .then(res => {
      return axios.post('https://myapi.com/add-file', {
        fileId: fileIds[i]
      }).then(res => {
        resolve(res)
        // todo: also handle errors here
      })
    })
  })

})

// actually invoke your calls here
Promise.all(promises).then(res => /* success */ )

本质上,您要做的是同步创建promise调用(但还没有实际调用它们),以便可以使用正确的索引,然后使用Promise.all实际调用promise数组。

票数 1
EN

Stack Overflow用户

发布于 2017-12-28 00:07:08

问题是i绑定到您的.post部分中的相同值。

要解决这个问题,你可以使用一个自执行的匿名函数。

如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for (let i = 0; i < files.length; i++) {
  (function(i) {
    axios.put(signedUrls[i], files[i], config).then(res => {
      axios.post('https://myapi.com/add-file', {
        fileId: fileIds[i]
      }).then(res => {
        // success
      });
  })(i);
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47999546

复制
相关文章
ORA-00933: SQL 命令未正确结束
java.sql.SQLSyntaxErrorException: ORA-00933: SQL 命令未正确结束 在数据库中语句运行完全没问题,但是在编程的时候却报这样的错误 控制台看似报一大堆异常原
时间静止不是简史
2020/07/24
5K0
ORA-00933: SQL 命令未正确结束
springboot mybatis缓存_secure boot未正确配置
简单来讲,缓存就是存储在缓冲区里的内容,或者可以理解为存在内存中的内容。用户可以将经常查询的内容放到缓存中,再次使用时直接从缓存中取值,而不需要再查询数据库。这样做的优点是响应迅速,减少了系统资源(网络资源、CPU资源等)开销;缺点是需要占用内存资源,服务器一旦关机,缓存就会丢失,重启后需要重新将写一遍数据到内存。
全栈程序员站长
2022/11/05
1K0
springboot mybatis缓存_secure boot未正确配置
报ORA-00933: SQL 命令未正确结束
oracle不支持limit,而配置文件中用的是mysql,导致底层进行组装的时候用的mysql语法
小炜同学
2022/09/23
1.7K0
PowerBI BUG 度量值数据格式未正确响应
有时候你会遇到这样的 BUG,描述如下: 【场景】将度量值的数据格式改为,返回 2 位小数。 【期待】度量值返回 2 位小数。 【实际】度量值未返回 2 位小数,其格式未发生变化。 也就是说,度量值数据格式未正确响应。 如图: 再继续操作,如下: 这里便是一个 BUG。 BUG 分析与修复 这往往是由于该数据模型中存在计算组,尤其是返回格式字符串的计算组导致。 如果你遇到这个 BUG,修复方法是刷新这个图表。方法如下: 刷新后,就会得到正确结果,如下: 总结 Power BI 整体非常稳定
BI佐罗
2021/09/17
1.7K0
【Java多线程】如何正确使用循环栅栏CyclicBarrier
本篇文章的代码示例已放到 github 上,Git地址为:advance(记录每一个学习过程),大家把代码下载下来之后,全局搜索一些关键代码,即可找到该文章的源码。
呆小鱼LQ
2023/09/20
2310
UE5打包SDK未正确安装的问题
Windows(笔者之前用的电脑是windows10,最新电脑使用的是windows11)下UE5打包项目的需要安装Visual Studio。 而且安装的时候需要选择上C++ 游戏开发相关模块。如下图所示:
用户3158888
2023/07/09
1.9K0
UE5打包SDK未正确安装的问题
MyBatis操作Oracle批量插入 ORA-00933: SQL 命令未正确结束
最近在使用MyBatis操作Oracle数据库的时候,进行批量插入数据,思路是封装一个List集合通过Myabtis
Arebirth
2019/09/24
2.9K0
MyBatis操作Oracle批量插入 ORA-00933: SQL 命令未正确结束
JS循环中使用async、await的正确姿势
概览(循环方式 - 常用) for map forEach filter 声明遍历的数组和异步方法 声明一个数组:⬇️ const skills = ['js', 'vue', 'node', 'react'] 再声明一个promise的异步代码: ⬇️ function getSkillPromise (value) { return new Promise((resolve, reject) => { setTimeout(() => { resolve(val
科技新语
2022/12/15
3.9K0
JS循环中使用async、await的正确姿势
MyBatis操作Oracle批量插入 ORA-00933: SQL 命令未正确结束
最近在使用MyBatis操作Oracle数据库的时候,进行批量插入数据,思路是封装一个List集合通过Myabtis
星哥玩云
2022/08/18
3.5K0
MyBatis操作Oracle批量插入 ORA-00933: SQL 命令未正确结束
python循环删除列表元素常见错误与正确方法
常见错误 常见错误一:使用固定长度循环删除列表元素 # 使用固定长度循环pop方法删除列表元素 num_list_1 = [1, 2, 2, 2, 3] for i in range(len(num_list_1)): if num_list_1[i] == 2: num_list_1.pop(i) else: print(num_list_1[i]) print("num_list_1:", num_list_1) # IndexError: list
演化计算与人工智能
2020/08/14
1.5K0
win10控件安装不了_控件未安装或安装不正确
有关 VCL 控件的常见问题 (安装、卸载、升级BCB版本等) 控件安装 (*.BPL) 1.选择 BCB 菜单 File→Close All (关闭所有文件) 选择BCB 菜单: Project→Options→Packages→Add, 选择 *.bpl 文件, 然后按“打开”按钮
全栈程序员站长
2022/09/29
3.3K0
小米bl未解锁变砖了如何刷机_如何正确刷机
选择一部合适可以解锁的手机,以小米为例(我有的),小米需要绑定账号在新手机15天。去小米官方申请(https://www.miui.com/unlock/index.html),登陆账号,下载解锁工具,在工具里面登录小米账号,数据线连接进入bl模式的手机.(解锁会清空手机数据).解锁后手机仍保修
全栈程序员站长
2022/08/14
8.9K0
小米bl未解锁变砖了如何刷机_如何正确刷机
超级播放器点播如何使用Fileid加密播放?
1.播放视频中会有一些视频不想被没获取到或者不想别人看到,这个时候就会用到加密,超级播放是通过视频文件的id来进行加密
腾讯云-qichengdeng
2019/09/12
1.6K0
如何在 JS 循环中正确使用 async 与 await
你想从fruitBasket获得每个水果的数量。 要获取水果的数量,可以使用getNumFruit函数。
前端小智@大迁世界
2019/06/15
5K0
蓝桥楼赛第9期-修复未正确实现的实验类
函数返回列表,且应按 text 字符串中的出现的正确用户名次数降序排列,次数相等无先后顺序,且不重复。
Spaceack
2020/11/04
1K0
如何在 JS 循环中正确使用 async 与 await
async 与 await 的使用方式相对简单。 当你尝试在循环中使用await时,事情就会变得复杂一些。
桃翁
2019/06/18
4.6K0
如何在 JS 循环中正确使用 async 与 await
Go常见错误集锦 | 循环内部使用defer的正确姿势
本文给大家介绍一些在使用循环语句内部使用defer会遇到的坑以及如何避免。下面是一个在循环中打开一组文件的函数例子。在该函数中,会从一个通道中不断的接收文件路径。然后通过遍历该通道,打开对应路径的文件,然后在使用完毕后关闭该文件资源。代码如下:
Go学堂
2023/01/31
1.1K0
dell电脑win10自动修复你的电脑未正确启动怎么修复
在众多的品牌电脑中,许多用户也都会选择自己喜欢的dell电脑来安装win10系统,但是最近有些用户在使用win10系统自动修复功能的时候,提示系统自动修复无法修复你的电脑,这是怎么一回事呢?那么有什么
用户8002245
2020/12/29
6K0
【Python】循环语句 ⑥ ( 变量作用域 | for 循环临时变量访问 | 分析在 for 循环外部访问临时变量的问题 | 在 for 循环外部访问临时变量的正确方式 )
如果需要在外部访问 for 循环的临时变量 , 建议将该 临时变量 预定义在 for 循环的外部 , 然后在后续的所有代码中可以访问该 临时变量 ;
韩曙亮
2023/10/11
7480
【Python】循环语句 ⑥ ( 变量作用域 | for 循环临时变量访问 | 分析在 for 循环外部访问临时变量的问题 | 在 for 循环外部访问临时变量的正确方式 )
如何正确遍历删除List中的元素(普通for循环、增强for循环、迭代器iterator、removeIf+方法引用)
所以推荐使用迭代器iterator,或者JDK1.8以上使用lambda表达式进行List的遍历删除元素操作。
崔笑颜
2020/06/08
12.2K0

相似问题

JavaScript警报未提供正确的fileID值

113

@ fileid附近的语法不正确

30

for循环未正确循环

08

Javascript for循环未正确循环

40

无效循环未正确循环

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文