DeprecationWarning:不推荐调用不带回调的异步函数。 - 如何找到“功能:”在哪里?
Posted
技术标签:
【中文标题】DeprecationWarning:不推荐调用不带回调的异步函数。 - 如何找到“功能:”在哪里?【英文标题】:DeprecationWarning: Calling an asynchronous function without callback is deprecated. - how to find where the "function:" is? 【发布时间】:2017-05-02 21:51:06 【问题描述】:我最近将我的节点更新到 7.2.1 并注意到有一个警告来了:
(node:4346) DeprecationWarning: 不推荐调用不带回调的异步函数。
4346
是干什么用的?我的js文件里只有2000行,所以不能是行号。在哪里可以找到代码?
【问题讨论】:
【参考方案1】:您可以使用--trace-deprecation
或--throw-deprecation
选项。
例如:
node --trace-deprecation app.js
或:
node --throw-deprecation app.js
第一个选项将记录堆栈跟踪,第二个选项将引发错误(如果未捕获,也会记录堆栈跟踪)。
另外,4346
很可能是进程 ID。
【讨论】:
得到了。我应该使用writeFileSync
而不是writeFile
:)
不,您仍然可能更喜欢使用非阻塞版本,即使您对结果不感兴趣。只需将 function() 传递给回调。是的,这个数字就是进程 ID。
对我来说也一样。将 writeFile 更改为 writeFileSync。【参考方案2】:
您需要为异步方法包含一个回调函数(在您的情况下为writeFile
)。
例如
var fs = require('fs');
fs.writeFile('writeMe.txt',data,'utf8',(error)=>
// your code goes here
);
在哪里
(error) => );
是回调函数。
从版本:v7.0.0 回调参数不再是可选的。不通过会发出弃用警告。
请参考:https://nodejs.org/api/fs.html#fs_fs_writefile_file_data_options_callback 了解更多信息。
【讨论】:
【参考方案3】:我个人更喜欢以下两种方法。
1:
fs.writeFile('example.md', data, (error) => console.log("Error!"); );
2:
fs.writeFile('example.md', data, function (err)
if(err)
throw err;
);
【讨论】:
【参考方案4】:这是因为你没有使用 err 回调捕获错误 在您的代码中使用如下所示
fs.write('./abc.txt',function(err)
if(err)
return console.log(err);
else
console.log('success.!');
);
【讨论】:
【参考方案5】:只提一下:
fs.writeFile('<your file name>',<your data>,function());
这里需要提到function(),因为这是一个回调(),以异步方式写入文本。
使用 writeFileSync 会进行同步调用
【讨论】:
【参考方案6】:我收到了同样的警告
[DEP0013] DeprecationWarning: Calling an asynchronous function without callback is deprecated.
并且有同样的问题,即不知道我的代码的哪一部分导致了它。于是我查看了我最近修改过的代码,看到了这个语句——怀疑:
Fs . writeFile (path, aString, cb, encoding);
问题是 cb (= 'callback') 并且编码参数的顺序错误。 我只是通过将上面的内容更改为:
Fs . writeFile (path, aString, encoding, cb);
但问题确实出在错误的警告信息上。 我传入了一个回调参数,但只是一个 不是函数而是字符串。所以如果警告有 说
"WWARNING: calling fs.writeFile() with a string-argument
where a function is expected"
...很明显发生了什么。当然 警告中的行号也很好。
所以重点是我没有调用 writeFile() 不推荐使用的回调参数。我曾是 使用错误类型的参数调用 writeFile()。 这应该是一个错误,而不是一个警告。
【讨论】:
以上是关于DeprecationWarning:不推荐调用不带回调的异步函数。 - 如何找到“功能:”在哪里?的主要内容,如果未能解决你的问题,请参考以下文章
我一直在我的节点代码中收到此错误。 DeprecationWarning:不建议在不回调的情况下调用异步函数
DeprecationWarning 之后的“用户不允许执行操作”