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 之后的“用户不允许执行操作”

DeprecationWarning 之后的“用户不允许执行操作”

不推荐在模板名称中传递模板处理程序是啥意思。意思是?