Javascript 不推荐使用警告:AWS JS SDK不推荐在没有回调的情况下调用异步函数

Javascript 不推荐使用警告:AWS JS SDK不推荐在没有回调的情况下调用异步函数,javascript,node.js,amazon-web-services,Javascript,Node.js,Amazon Web Services,我第一次尝试使用Promises和AWS JS SDK,我发现以下错误 不推荐使用警告:不使用回调调用异步函数是不推荐的 我在下面提供了一个堆栈跟踪。我尝试使用fs.unlink删除下载的文件时,似乎出现了错误 exports.generate = function (req, res) { if (typeof Promise === 'undefined') { AWS.config.setPromisesDependency(require('bluebird'));

我第一次尝试使用Promises和AWS JS SDK,我发现以下错误

不推荐使用警告:不使用回调调用异步函数是不推荐的

我在下面提供了一个堆栈跟踪。我尝试使用fs.unlink删除下载的文件时,似乎出现了错误

exports.generate = function (req, res) {

    if (typeof Promise === 'undefined') {
      AWS.config.setPromisesDependency(require('bluebird'));
    }

    var removeBatch = function removeBatch(files) {
        return Promise.all(files.map(function(file) {
            return fs.unlink(file.key);
        }));
    };

    var getBatch = function getBatch(files) {
        return Promise.all(files.map(function(file) {
            var params = {
                Bucket: 'my-bucket',
                Key: file.key
            };
            return app.s3.getObject(params).createReadStream().pipe(file.stream);
        }));
    };

    var fileNames = ['Original 106fm Logo #268390.jpg', 'test.jpg'];
    var files = fileNames.map(function(fileName) {
      return {
        key: fileName,
        stream: fs.createWriteStream(fileName)
      };
    });


    getBatch(files)
        .then(removeBatch.bind(null, files))
        .catch(console.error.bind(console));

}
这是堆栈跟踪

(node:63311) [DEP0013] DeprecationWarning: Calling an asynchronous function without callback is deprecated.
at makeCallback (fs.js:127:12)
at Object.fs.unlink (fs.js:1054:14)
at /src/splash.js:12:7
at Array.map (native)
at removeBatch (/src/splash.js:11:28)
at <anonymous>
at process._tickDomainCallback (internal/process/next_tick.js:208:7)

如何正确地从removeBatch方法返回承诺?

如果要使用返回承诺的fs.unlink版本,而不是使用回调,请使用如下mz模块:

const fs = require('mz/fs');
fs.unlink(name)
  .then(() => console.log('Success'))
  .catch(err => console.log('Error:', err));
见文件:

它不仅可以让你做这样的事情:

const fs = require('mz/fs');
fs.unlink(name)
  .then(() => console.log('Success'))
  .catch(err => console.log('Error:', err));
但也包括异步函数的内部:

try {
  await fs.unlink(name);
} catch (e) {
  console.log('Error:', e);
}
现在,回答你的问题:

如何从removeBatch方法正确返回承诺

对于.unlink的mz/fs版本,它是一个单行程序:

const removeBatch = files => Promise.all(files.map(file => fs.unlink(file.key));