javascript - 如何使用地图功能的承诺在javascript中同步运行?
问题描述
我面临一些问题Promise.all()
。例如,如果 finalArr 有 2 个对象,则每行一次运行 2 次。它没有同步运行:
try{
let newData = await Promise.all(finalArr.map(async receiveData => {
receiveData['internalCode'] = await RecievedLots.beforeRLCreation(receiveData.company_id)
console.log(receiveData.internalCode)
// For Example above console line is printing 2 times if finalArr has 2 objects
// same like remaining functions.. how to avoid this?
const createdReceiveMaterial = await RecievedLots.create(receiveData).fetch();
if(!!createdReceiveMaterial && Object.keys(createdReceiveMaterial).length > 0) {
const poMaterial = await POMaterials.findOne({id: receiveData.po_material_id});
let status_id = poMaterial.status_id;
let quantityReceived = poMaterial.qty_received + receiveData.qty_recieved
let qtyAvailable = poMaterial.qty_available+ receiveData.qty_recieved;
if(poMaterial.quantity <= quantityReceived){
status_id = 6
}
else if(poMaterial.quantity > quantityReceived && quantityReceived != 0 ){
status_id = 5
}
else if(quantityReceived == 0){
status_id = 4
}
const updatePOmaterial = await POMaterials.update({id: receiveData.po_material_id})
.set({qty_received:quantityReceived,status_id:status_id, qty_available: qtyAvailable}).fetch()
// console.log(updatePOmaterial)
}
return receiveData
}))
cb(null, newData)
}
catch(err){
cd(err)
}
解决方案
以“并行”方式解决提供的承诺实际上是Promise.all()
如果性能很重要并且您不关心顺序的优势之一。如果您需要按顺序解决 Promise,您可以简单地使用for .. of
-loop:
const newData = [];
for (const receiveData of finalArr) {
receiveData['internalCode'] = await RecievedLots.beforeRLCreation(receiveData.company_id);
// rest of your code here
// ...
// at the end simply push to newData instead of returning receive Data
newData.push(receiveData);
}
推荐阅读
- string - 分隔字符串的偶数和奇数索引并分别打印它们 - 最后一个字符打印的问题
- c# - 即使在添加自定义 OutputFormatter 后仍保留默认输出格式化程序
- java - 如何使用 JSch 知道线程是否被中断
- spring-boot - Springboot2 JPA 对 Id 使用 DB 默认序列
- python - 使用 pandas 和 BERT 将余弦相似度公式从一个数据帧循环到另一个数据帧
- java - 使用 API 的外部证书 (JAVA)
- arrays - 如何在 AWS API 响应中发送 numpy 数组或浮点值?
- ios - 以编程方式创建新的 iOS15 FaceTime 链接
- oracle - 调整查询以显示表中的列是否为主键列
- javascript - 使用按钮显示/隐藏图像和文本