我有一个数组 [1,2,3,4,5] ,当插入数据库时,我除了收到数据库中的 [1,2,3,4,5] 这样的结果之外。但只有循环 for 才能给我预期的结果,map() 和 forEach() 总是给我无序数组,如 [1,3,4,5,2] 或 [4,3,2,5,1] 等。
这是我的代码:
arrayChild.map(async item => {
await this.repository.save(item)
});
arrayChild.forEach(async item => {
await this.repository.save(item)
});
for (let i = 0; i < arrayChild.length; i++) {
await this.repository.save(arrayChild[i])
}
请告诉我原因。感谢您的关注
because map
and forEach
方法不处理您传入的异步函数async await
way.
当您检查polyfill https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map#polyfill这两种方法,你会发现这样的一行callback.call(T, kValue, k, O);
。所以,基本上,它只是执行callback
。如果callback
是一个异步方法,它不会等待其执行完成。相反,它继续执行其他代码。
因此,当您将数据数组保存到数据库时,里面的回调map
& forEach
只是发出几个查询,数据库的最终执行顺序可能是不确定的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)