【问题标题】:DeprecationWarning: Calling an asynchronous function without callback is deprecated. - how to find where the "function:" is?DeprecationWarning:不推荐调用不带回调的异步函数。 - 如何找到“功能:”在哪里?
【发布时间】:2017-05-02 21:51:06
【问题描述】:

我最近将我的节点更新到 7.2.1 并注意到有一个警告来了:

(node:4346) DeprecationWarning: 不推荐调用不带回调的异步函数。

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

【问题讨论】:

    标签: javascript node.js asynchronous


    【解决方案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()。 这应该是一个错误,而不是一个警告。

            【讨论】:

              猜你喜欢
              • 2018-01-09
              • 2023-04-10
              • 2018-04-11
              • 2017-08-27
              • 1970-01-01
              • 2018-03-27
              • 2019-05-09
              • 1970-01-01
              • 2015-09-08
              相关资源
              最近更新 更多