Javascript 不推荐使用警告:AWS JS SDK不推荐在没有回调的情况下调用异步函数
我第一次尝试使用Promises和AWS JS SDK,我发现以下错误 不推荐使用警告:不使用回调调用异步函数是不推荐的 我在下面提供了一个堆栈跟踪。我尝试使用fs.unlink删除下载的文件时,似乎出现了错误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'));
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));