javascript - 节点 MySQL 的插入顺序
问题描述
我正在使用mysql
.
这些图像放入数据库的顺序很重要。我知道有一个order
专栏是可能的,但由于项目的后勤问题,我无法做到这一点。
因此,使用Map,我保持了对象的顺序,结果如下:
Map {
0 => 'https://i.ebayimg.com/00/s/NTc5WDg0Ng==/z/dMkAAOSwHcpaoorf/$_03.JPG',
1 => 'https://i.ebayimg.com/00/s/NTc5WDc4NA==/z/hVkAAOSwQ19aoorl/$_03.JPG',
2 => 'https://i.ebayimg.com/00/s/NTc5WDgxMQ==/z/-kYAAOSwYBxaoorO/$_03.JPG',
3 => 'https://i.ebayimg.com/00/s/NTgwWDgxMQ==/z/seAAAOSwxo9aoorR/$_03.JPG',
4 => 'https://i.ebayimg.com/00/s/NTgwWDEwMzA=/z/p1AAAOSwW5laoorU/$_03.JPG',
5 => 'https://i.ebayimg.com/00/s/NzY0WDExMTQ=/z/p10AAOSwW5laoorY/$_03.JPG',
6 => 'https://i.ebayimg.com/00/s/NTE4WDc3Nw==/z/Yq0AAOSwVExaoorb/$_03.JPG',
7 => 'https://i.ebayimg.com/00/s/NTgwWDEwMzA=/z/mNMAAOSwfTVaoori/$_03.JPG' }
伟大的。所以现在把这些放在数据库中:
data.images.forEach(function(image, j) {
let insert_image_query = "INSERT INTO images (file, is_external) VALUES ('" + image + "', 1)";
mysqlQuery.executeQuery(insert_image_query).then(function (insert_image_response) {
});
});
但它们并没有按顺序排列,有时非常随机。有什么我想念的吗?
解决方案
ECMA-262 第 5 版规范和MDN 的Array.forEach()
页面都显示了 的算法.forEach()
,并且它肯定会按索引升序迭代数组元素(跳过从未分配过值的索引),但是特定请求的执行时间可能会有所不同。您传递给 的回调函数的每次调用.foreach()
都不会持续相同的时间。它们都按您希望的顺序调用,但由于它们不是同步的,您的代码不会等待第一个完成,然后再执行下一个。
当然,某些浏览器可能无法正确实现该算法,但我不知道有哪些没有。
要解决这个问题,您可以将整个事情包装到异步函数中,并分别等待每个函数的执行
(async ()=>{
for (let image of data.images){
let insert_image_query = "INSERT INTO images (file, is_external) VALUES ('" + image + "', 1)";
await mysqlQuery.executeQuery(insert_image_query).then(function (insert_image_response) {
});
}
})();
或使用.reduce()
语法
data.images.reduce(async (lastItemsPromise, image) => {
await lastItemsPromise;
let insert_image_query = "INSERT INTO images (file, is_external) VALUES ('" + image + "', 1)";
return mysqlQuery.executeQuery(insert_image_query).then(function (insert_image_response) {
});
}, Promise.resolve());
推荐阅读
- java - 离线谷歌移动视觉 API 扫描图像时出现错误的文本序列
- sql-server - 用于计算值和分配分类的嵌套 TSQL
- android - Android Exoplayer 缓存 m3u8 音频以提供离线支持
- c# - 如何制作使字符串为空的方法
- javascript - 所有输入字段的总和不是正确答案
- c# - fastreport 根据数据隐藏 DataBand 中的元素
- tidb - TiDB 中的 mysql-safe 模式或类似的东西
- c - CMakeLists.txt 访问 GSL 库 C
- python - 如何在 python 中将复杂函数转换为 lambda?
- azure-devops - VS402864:找不到对应于 id PipelineArtifact 的工件类型