我正在尝试使用Promises和AWS JS SDK第一次出现以下错误
DeprecationWarning:不推荐在没有回调的情况下调用异步函数。
我在下面提供了一个堆栈跟踪。在我尝试使用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
如何从// Preprocessor commands
#include <stdio.h>
#include <stdlib.h>
//-----------------------------
int main(){
int attempts=0;
char result;
while(attempts < 5){
printf("\n");
printf("Entered Loop\n");
printf("Enter result (P/F)\n");
scanf("%c", &result);
if(result == 'P'){
printf("Passed\n");
attempts++;
break;
}
else if(result == 'F'){
printf("Entered F Loop\n");
printf("Try again\n");
attempts++;
continue;
}
printf("Exited F Loop\n");
}
if(attempts == 5){
printf("QUIT!\n");
}
}
方法正确返回Promise?
答案 0 :(得分:4)
如果您想使用返回承诺而不是回调的fs.unlink
版本,请使用mz
模块,如下所示:
const fs = require('mz/fs');
参见文档:
这不仅可以让你做到这样的事情:
fs.unlink(name)
.then(() => console.log('Success'))
.catch(err => console.log('Error:', err));
但也在async
函数内部:
try {
await fs.unlink(name);
} catch (e) {
console.log('Error:', e);
}
现在,问你的问题:
如何从我的removeBatch方法正确返回Promise?
使用mz/fs
.unlink()
版本的const removeBatch = files => Promise.all(files.map(file => fs.unlink(file.key));
,这是一个单行:
\(([0-9]+)\)