【问题标题】:aws-sdk-js E2 createVPC is executed twice while waiting adding a promiseaws-sdk-js E2 createVPC 在等待添加承诺时执行了两次
【发布时间】:2022-01-08 13:03:52
【问题描述】:
    ec2
      .createVpc(params, function (err, data) {
        if (err) {
          console.log(err, err.stack);
          // an error occurred
        } else {
          logger.log.info(
            `Deployment VPC ${deployment.name} has been created.`
          );
          db.saveData(data, deployment.name);

          return data;
        }
      })
      .promise()

我试图在上面运行这段代码,这是文档中最简单的资源。但是当我添加.promise() 时,创建操作被触发了两次。当我删除它时,它只会创建一个 VPC 实例。但是我需要访问有关已创建资源的信息才能将其保存到数据库中。

【问题讨论】:

  • 除了回调中的数据还需要什么?
  • 我只需要数据。这很好,我能够检索它们。但我不想创建两个 vpc 资源的函数。
  • 这是每次运行的结果。 [2022-01-08T14:16:16+01:00] 信息:已创建部署 VPC 测试。 [2022-01-08T14:16:16+01:00] 信息:部署 VPC 测试已创建。

标签: javascript node.js promise aws-sdk-js


【解决方案1】:

我猜这是因为你混合了两种触发请求的方式——提供回调和调用承诺。如果要使用promise,则应在then()(或使用await)中处理返回的数据。

then() 为例:

ec2.createVpc(params).promise().then((data) => {
    logger.log.info(
       `Deployment VPC ${deployment.name} has been created.`
    );
    db.saveData(data, deployment.name);
    return data;
}, (err) => {
    console.log(err, err.stack);
})

【讨论】:

  • 不幸的是,这不起作用。根据文档docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/…,这也是推荐的。
  • 在这种情况下究竟是什么不起作用?它没有提出任何请求还是有其他问题?
  • Nono,一切正常,但它被请求两次。我调用该函数一次,它会创建两个资源。当我删除.promise 时,它只会创建一个原本应有的资源。
  • 我的意思是我想在不创建同一资源的两个资源的情况下调用返回承诺
  • 如果即使您没有在createVpc() 中包含回调,您也看到了这种情况,您可能应该提交一份错误报告(注意:我已经回答了我的答案,因为它实际上缺少一个@ 987654328@电话)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-24
  • 1970-01-01
  • 2023-04-06
  • 1970-01-01
  • 1970-01-01
  • 2020-07-19
相关资源
最近更新 更多