误导“调用回调没有异步函数已被弃用”警告
的NodeJS给我一个警告误导“调用回调没有异步函数已被弃用”警告
(节点:32600)[DEP0013] DeprecationWarning:调用回调没有一个异步 功能已被弃用。
当我运行这个“测试”:
describe('whatever',() => {
it('test simple', async() => {
const dir = './build/fileTests';
if (fs.existsSync(dir)) {
console.log(`deleting ${dir}`);
await fs.rmdir(dir);
}
});
});
嗯,我几乎同意,使用异步函数没有回调是坏的(因为只有你能确切地知道CB内,它发生了,继续等...
...如果它不是我故意使用的ES7 async
/await
,因为它们使它同步,所以我可以用我得到的任何东西...(在这个特殊情况下,我可以回避到rmdirSync,但这不是我的观点......)
so my Question:我怎样才能摆脱像这样的警告?
- 以一种有意义的方式,异步/的await ... 工作时 - 处理返回值,如const r = ...
不被认为是“回调处理” ...
fs.rmdir做不返回承诺对象,这就是为什么此代码与赃物失败。你必须promisify它,使用库或Node.js的promisify
方法util
核心模块
注:如果您使用的fs
核心模块中的其他异步方法同样的方法,它会失败
做到这一点
const util = require("util");
const fs = require("fs");
const removeDir = util.promisify(fs.rmdir);
const rmDir = async() => {
try {
await removeDir("directory_name");
} catch(ex) {
console.error(ex)
}
}
只要确保你promisify它
编辑:声明一个变量来保存的uti.promisify(fs.rmdir)
值由@bergi
编辑的建议:添加错误与try .. catch
块处理
请注意,您应该将'util.promisify'调用放在'rmDir'函数之外,并存储结果。 – Bergi
已作出更改。谢谢@Bergi。 –
'异步/ await'不作异步代码同步。它可能会喜欢它,但事实并非如此。 – robertklep
这让我想起回调作为异步谎言 –