DeprecationWarning:AWS JS SDK不推荐在不使用回调的情况下调用异步函数

时间:2017-07-11 13:51:44

标签: javascript node.js amazon-web-services

我正在尝试使用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?

1 个答案:

答案 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]+)\)