我最近将我的节点更新为7.2.1并发现有警告:
(node:4346)DeprecationWarning:不使用回调调用异步函数。
这是4346
的内容是什么?我在js文件中只有2000行,所以它不能是行号。我在哪里可以找到代码?
答案 0 :(得分:52)
您可以使用--trace-deprecation
或--throw-deprecation
选项。
例如:
node --trace-deprecation app.js
或:
node --throw-deprecation app.js
第一个选项将记录堆栈跟踪,第二个选项将引发错误(如果未捕获,则还会记录堆栈跟踪)。
此外,4346
很可能是进程ID。
答案 1 :(得分:5)
您需要为异步方法包含一个回调函数(在您的情况下为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 了解更多信息。
答案 2 :(得分:2)
我更喜欢以下两种方法。
fs.writeFile('example.md', data, (error) => { console.log("Error!"); });
fs.writeFile('example.md', data, function (err) {
if(err){
throw err;
}
});
答案 3 :(得分:0)
我得到了同样的警告
[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()。 那应该是一个错误,而不是警告。
答案 4 :(得分:0)
只需提及:
fs.writeFile('<your file name>',<your data>,function(){});
在这里,您需要提及function(){},因为这是一个以异步方式编写文本的callback()。
使用writeFileSync将进行同步调用
答案 5 :(得分:-3)
得到了几乎相同的错误消息:
(node:13844)错误:不推荐在没有回调的情况下调用异步函数。 内部/过程/ warning.js:21
使用writeFileSync
代替writeFile
解决了问题。