关于循环里怎么正确使用await进行异步操作

背景
今年因为忙(其实是懒),没怎么写博客,加上工作内容比较low 遇到的问题也low,实在没啥好写的,这次终于碰上了个有趣的问题 赶紧来写一波
问题

因为协议经常不知道为什么不给定批量删除的接口,只能自己循环单个删除,下面这种在map循环里进行await 实际上是同步操作的

  aIdList.map(async (item) => {
                await _WebSDK.WSDK_SetDeviceConfig(
                    'deleteIOTChannel',
                    { channel: item },
                    {
                        type: 'DELETE'
                    }
                );
            });

正确写法是:在for循环里 才是真正的异步

            for (let item in aIdList) {
                try {
                    await _WebSDK.WSDK_SetDeviceConfig(
                        'deleteIOTChannel',
                        { channel: item },
                        {
                            type: 'DELETE',
                            success: () => {},
                            error: (xml, xhr) => {
                                _oResponse.saveState(xhr);
                            }
                        }
                    );
                } catch (error) {}
            }
原因

如何在 JS 循环中正确使用 async 与 await

这种行为适用于大多数循环(比如while和for-of循环)…
但是它不能处理需要回调的循环,如forEach、map、filter和reduce。在接下来的几节中,我们将研究await 如何影响forEach、map和filter。

从上面看出来什么
如果你想连续执行await调用,请使用for循环(或任何没有回调的循环)。
永远不要和forEach一起使用await,而是使用for循环(或任何没有回调的循环)。
不要在 filter 和 reduce 中使用 await,如果需要,先用 map 进一步骤处理,然后在使用 filter 和 reduce进行处理。

你可能感兴趣的:(关于循环里怎么正确使用await进行异步操作)