Javascript 使用Promisify从回调转换为异步等待格式后,AWS S3上载不起作用

Javascript 使用Promisify从回调转换为异步等待格式后,AWS S3上载不起作用,javascript,amazon-web-services,amazon-s3,promise,aws-sdk,Javascript,Amazon Web Services,Amazon S3,Promise,Aws Sdk,我正在使用方法从浏览器中的React应用程序将文件上载到S3 bucket 具体情况如下: var params = {Bucket: 'bucket', Key: 'key', Body: stream}; s3.upload(params, function(err, data) { console.log(err, data); }); 我将其包装为,使其像异步一样工作,如下所示: const AWS = require('aws-sdk'); const { promisify }

我正在使用方法从浏览器中的React应用程序将文件上载到S3 bucket

具体情况如下:

var params = {Bucket: 'bucket', Key: 'key', Body: stream};
s3.upload(params, function(err, data) {
  console.log(err, data);
});
我将其包装为,使其像异步一样工作,如下所示:

const AWS = require('aws-sdk');
const { promisify } = require('es6-promisify');

... <in my React component> ...
async uploadFile() {
try {
    var params = {
      Bucket: <BucketName>,
      Key: <KeyName>,
      Body: <File Stream>
    };
    const res = await uploadToS3Async(params);
    console.log(res);
  } catch (error) {
    console.log(error);
  }
}

您不需要使用
es6 promisify

你可以做:

try {
  const params = {Bucket: 'bucket', Key: 'key', Body: stream};  
  const data = await s3.upload(params).promise();
  console.log(data);
}
catch (err) {
  console.log(err);
}

您不需要使用
es6 promisify

你可以做:

try {
  const params = {Bucket: 'bucket', Key: 'key', Body: stream};  
  const data = await s3.upload(params).promise();
  console.log(data);
}
catch (err) {
  console.log(err);
}

如果您想让它成为一个
承诺
,那么您可以简单地实现这样的目标

aws.js

const params = {
    Bucket: 'bucket',
    Key: 'key',
    Body: stream
};

const awsService = {};

awaService.upload = () => {
    return new Promise((resolve, reject) => {
        s3.upload(params, function(err, data) {
            if (err) {
                return reject(err);
            }
            return resolve(data);
        });
    });
};

module.exports = awsService;

const awsService = require('./awsService');

const utils = {};

utils.upload = async () => {
    try {
        const result = await awsService.upload();
        return result;
    } catch (err) {
        console.log(err);
        throw err;
    }
};

module.exports = utils;
在另一个文件上,像这样调用

util.js

const params = {
    Bucket: 'bucket',
    Key: 'key',
    Body: stream
};

const awsService = {};

awaService.upload = () => {
    return new Promise((resolve, reject) => {
        s3.upload(params, function(err, data) {
            if (err) {
                return reject(err);
            }
            return resolve(data);
        });
    });
};

module.exports = awsService;

const awsService = require('./awsService');

const utils = {};

utils.upload = async () => {
    try {
        const result = await awsService.upload();
        return result;
    } catch (err) {
        console.log(err);
        throw err;
    }
};

module.exports = utils;

如果您想让它成为一个
承诺
,那么您可以像这样简单地实现

aws.js

const params = {
    Bucket: 'bucket',
    Key: 'key',
    Body: stream
};

const awsService = {};

awaService.upload = () => {
    return new Promise((resolve, reject) => {
        s3.upload(params, function(err, data) {
            if (err) {
                return reject(err);
            }
            return resolve(data);
        });
    });
};

module.exports = awsService;

const awsService = require('./awsService');

const utils = {};

utils.upload = async () => {
    try {
        const result = await awsService.upload();
        return result;
    } catch (err) {
        console.log(err);
        throw err;
    }
};

module.exports = utils;
在另一个文件上,像这样调用

util.js

const params = {
    Bucket: 'bucket',
    Key: 'key',
    Body: stream
};

const awsService = {};

awaService.upload = () => {
    return new Promise((resolve, reject) => {
        s3.upload(params, function(err, data) {
            if (err) {
                return reject(err);
            }
            return resolve(data);
        });
    });
};

module.exports = awsService;

const awsService = require('./awsService');

const utils = {};

utils.upload = async () => {
    try {
        const result = await awsService.upload();
        return result;
    } catch (err) {
        console.log(err);
        throw err;
    }
};

module.exports = utils;

您提供的代码中没有
getSignatureVersion
。您提供的代码中甚至没有
getSignatureVersion
服务。甚至没有
服务