【问题标题】:Continue promise.all loop if error caught in lambda node scenario如果在 lambda 节点场景中发现错误,则继续 promise.all 循环
【发布时间】:2019-01-03 07:30:55
【问题描述】:

我有一个在 AWS lambda 函数中运行的简单节点脚本。每个承诺都是一个可能失败的 AWS sdk 调用,但在大多数情况下,我想忽略失败并继续。

当我发现错误并按如下方式忽略它时,我收到 UnhandledPromiseRejectionWarning 错误

Promise.all(promises).then(() => {
        callback(null, 'completed');
    }).catch(err => {
        console.log('aws errors!', err);
    });

每个承诺基本上都是一个putScheduledUpdateGroupAction 调用,如下所示

return new Promise((resolve, reject) => {
        aws.putScheduledUpdateGroupAction(params, function(err, data) {
            if (err) {
                reject(err);
            }
            else {
                resolve(data);
            }
        });
    });

需要做什么才能忽略 AWS 错误并继续而不出现此拒绝错误?我需要它在 lambda 情况下继续,而不是独立节点。

【问题讨论】:

  • 你能发一个minimal reproducible example吗?究竟是哪里抛出了错误?
  • @CertainPerformance 我已经为创建的承诺添加了代码
  • 您应该使用 AWS 调用的承诺变体。只需返回 aws.putScheduledUpdateGroupAction(params).promise()。

标签: node.js amazon-web-services promise


【解决方案1】:

更新:

要忽略任何失败的承诺,使用 Promise.all(promises).catch() 应该可以捕获所有内容。

原答案:

如果你想忽略特定承诺的失败(不是全部),你可以在每个承诺中放置一个.catch() 处理程序。

return aws.putScheduledUpdateGroupAction(params).promise().catch((err) => {
    // Log the error but don't throw.
    console.log(err)
})

【讨论】:

  • 不应该Promise.allcatch 处理它吗? jsfiddle.net/oLz5bvpa
  • 谢谢,但我希望在我暂时将调用更改为 .promise() 之前修复我现有的代码
  • Promise.allcatch 应该可以处理它,而无需在每个中添加 catch。你能分享一个完整的例子@yoyoma吗?如果您在putScheduledUpdateGroupAction 处理函数中记录err 的值,您会看到记录的内容吗?我的猜测是您看到的错误来自其他地方。
  • 对。 Promise.allcatch 捕获一切。在我的回答中澄清了这一点。
猜你喜欢
  • 1970-01-01
  • 2011-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-08
  • 2019-01-11
相关资源
最近更新 更多