【问题标题】:Amazon S3 putobject for uploading a file to S3, does not return a promise用于将文件上传到 S3 的 Amazon S3 putobject,不返回承诺
【发布时间】:2020-11-15 20:09:21
【问题描述】:

我有一个使用 Amazon S3 putobject 将文件上传到 S3 的函数,但这不会返回我需要等待成功完成的承诺,然后我可以加载带有结果(成功或失败)的模式。

我在 s3 函数上尝试了各种异步等待承诺排列,但没有一个适用于 .on httpUploadProgress。

s3.putObject(params)
        .on("httpUploadProgress", (progressEvent, response) => {
          const percent = parseInt(
            (100 * progressEvent.loaded) / progressEvent.total
          )
          setuploadprog(percent)
          if (percent === 100) {
            setuploadsuccess(1)
          }
        })
        .send((err, data) => {
          if (err) {
            console.log(err, err.stack)
            setuploadsuccess(2)
          } else {
            console.log(data)
          }
        })

【问题讨论】:

    标签: javascript amazon-web-services amazon-s3 async-await


    【解决方案1】:

    不要通过回调调用send。请改用promise 方法:

    s3.putObject(params)
        .on("httpUploadProgress", (progressEvent, response) => {
            const percent = Math.floor(progressEvent.loaded / progressEvent.total * 100);
            setuploadprog(percent)
        })
        .promise()
        .then(data => {
            setuploadsuccess(1);
            return data;
        }, err => {
            setuploadsuccess(2);
            throw err;
        });
    

    【讨论】:

    • 您好,Bergi,我想在 state 中添加返回承诺。有可能吗?
    • 当然,就return吧?
    • 对不起,我是新来的。你能用代码示例解释一下吗?
    • 不,我想我不明白您在寻找什么。你到底想用承诺做什么?你想在哪里await呢?请edit your question 包含更多代码,或ask a new one 如果它是一个单独的主题。
    • 我不希望模型在文件上传之前被触发,它仍在触发
    【解决方案2】:
    ...await s3
    .putObject(params)
    

    自己解决问题。

    【讨论】:

      猜你喜欢
      • 2021-07-15
      • 1970-01-01
      • 2012-09-09
      • 2019-12-10
      • 2013-09-09
      • 2015-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多