gpt4 book ai didi

javascript - 误导性 “Calling an asynchronous function without callback is deprecated” 警告

转载 作者:搜寻专家 更新时间:2023-10-31 23:03:24 25 4
gpt4 key购买 nike

NodeJS 给我一个警告

(node:32600) [DEP0013] DeprecationWarning: Calling an asynchronous function without callback is deprecated.

当我运行这个“测试”时:

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 ,但这不是我的意思......)

所以我的问题:我怎样才能摆脱这些警告?

——以一种有意义的方式,在使用 async/await 时...– 处理返回值,如 const r = ... 不被识别为“回调处理”...

最佳答案

fs.rmdir 不返回 promise 对象,这就是此代码因 swag 而失败的原因。你必须 promise 它,使用库或 util 核心模块中的 node.js promisify 方法

注意:如果您对 fs 核心模块中的其他 async 方法使用相同的方法,它将失败

这样做

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)
}
}

只要确保你 promise 了它

编辑:按照@bergi 的建议声明一个变量来保存uti.promisify(fs.rmdir) 的值

编辑:使用 try .. catch block 添加错误处理

关于javascript - 误导性 “Calling an asynchronous function without callback is deprecated” 警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46768893/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com