DeprecationWarning:不支持调用不带回调的异步函数。 - 如何找到"功能:"是?

时间:2016-12-17 05:14:53

标签: javascript node.js asynchronous

我最近将我的节点更新为7.2.1并发现有警告:

  

(node:4346)DeprecationWarning:不使用回调调用异步函数。

这是4346的内容是什么?我在js文件中只有2000行,所以它不能是行号。我在哪里可以找到代码?

6 个答案:

答案 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)

我更喜欢以下两种方法。

1

fs.writeFile('example.md', data, (error) => { console.log("Error!"); });

2:

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解决了问题。