【发布时间】:2017-05-02 21:51:06
【问题描述】:
我最近将我的节点更新到 7.2.1 并注意到有一个警告来了:
(node:4346) DeprecationWarning: 不推荐调用不带回调的异步函数。
4346 是干什么用的?我的js文件里只有2000行,所以不能是行号。在哪里可以找到代码?
【问题讨论】:
标签: javascript node.js asynchronous
我最近将我的节点更新到 7.2.1 并注意到有一个警告来了:
(node:4346) DeprecationWarning: 不推荐调用不带回调的异步函数。
4346 是干什么用的?我的js文件里只有2000行,所以不能是行号。在哪里可以找到代码?
【问题讨论】:
标签: javascript node.js asynchronous
您可以使用--trace-deprecation 或--throw-deprecation 选项。
例如:
node --trace-deprecation app.js
或:
node --throw-deprecation app.js
第一个选项将记录堆栈跟踪,第二个选项将引发错误(如果未捕获,也会记录堆栈跟踪)。
另外,4346 很可能是进程 ID。
【讨论】:
writeFileSync 而不是writeFile :)
您需要为异步方法包含一个回调函数(在您的情况下为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 了解更多信息。
【讨论】:
我个人更喜欢以下两种方法。
fs.writeFile('example.md', data, (error) => { console.log("Error!"); });
fs.writeFile('example.md', data, function (err) {
if(err){
throw err;
}
});
【讨论】:
这是因为你没有使用 err 回调捕获错误 在您的代码中使用如下所示
fs.write('./abc.txt',function(err){
if(err){
return console.log(err);
}
else
{
console.log('success.!');
}
});
【讨论】:
只提一下:
fs.writeFile('<your file name>',<your data>,function(){});
这里需要提到function(){},因为这是一个回调(),以异步方式写入文本。
使用 writeFileSync 会进行同步调用
【讨论】:
我收到了同样的警告
[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()。 这应该是一个错误,而不是一个警告。
【讨论】: