问题描述
我有一个异步映射函数,但希望它同步执行,因为我需要在同一循环中使用第一条语句的输出。但是,即使使用await语句,地图也可以异步运行,请您帮忙了解为什么会发生这种情况。
我的用例是,如果不存在,则将记录插入mongodb;如果存在循环,则对其进行更新。 数据存在于db中,但在循环中查找失败,但在外部可用。
我的代码:
@IBAction func keyPressed(_ sender: UIButton) {
if sender.isSelected {
sender.backgroundColor = .clear
} else {
sender.backgroundColor = .green
}
sender.isSelected.toggle()
}
我得到的日志:
const doSomethingAsync = () => {
return new Promise(resolve => {
setTimeout(() => {
resolve(Date.now());
},1000);
});
};
await Promise.all(
modelVarients.map(async varient => {
console.log(`varient: ${varient._id}`);
console.log('1');
const onlineDevice = await Device.findOne({
model: varient._id,});
console.log('2');
await doSomethingAsync();
console.log('3');
await doSomethingAsync();
console.log(JSON.stringify(onlineDevice));
await doSomethingAsync();
console.log('4');
return varient;
})
);
但是我希望得到什么:
varient: 8 pro
1
varient: note
1
varient: iphone x
1
2
2
2
3
3
3
null
null
null
4
4
4
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)