如何在javascript中同步异步映射功能

问题描述

我有一个异步映射函数,但希望它同步执行,因为我需要在同一循环中使用第一条语句的输出。但是,即使使用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 (将#修改为@)