繁体   English   中英

这是使用异步/等待的正确方法吗?

[英]Is this the correct way to use async/await?

我有以下代码:

        var execute = async (assets: DCXComposite[], session: Session) => {
            // this returns a response object with statusCode property. If the status Code is 200, it was a successful operation.
            return await session.performBatchOperation();
        };

        try {
            var assets: Composite[] = [];
            for (const project of projects) {
                assets.push(project.getComposite());

                if (assets.length === 50) {
                    var result = execute(assets);
                    assets = [];
                }
            }
        } catch (err) {
            Logger.error('Unable to batch delete projects', { error: err });
        }

这是如何使用异步/等待? 如果其中一个执行失败,整个代码是否会失败并被扔到 catch 块中? 意味着接下来的 50 个项目没有执行? 当 await 抛出错误时会发生什么?

目标是批量删除项目。 我正在拨打 API 电话并发送要删除的 50 个 API 项目的列表。 如果请求成功,则执行调用将返回一个 object,statusCode = 200。

如果您想按顺序处理您的项目,在第一次失败时停止,然后按照 Unmitigated 的评论的建议,然后只需await调用您的execute function ( await execute(assets); )。

如果您想并行启动所有这些,并知道其中是否有任何失败,您可以累积返回的 Promises 并等待该组:

const allResults = [];

try {
  for (const project of projects) {
    // ...
    allResults.push(execute(/* ... */));
  }
  // Await for ALL promises to complete, or throw at first failure
  await Promise.all(allResults);
} catch (err) {
  // ...
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM