【问题标题】:node deprecation warning: Calling an asynchronous function without callback is deprecated节点弃用警告:不推荐调用不带回调的异步函数
【发布时间】:2017-08-27 18:28:29
【问题描述】:

我在尝试通过重新加载在 localhost:8080 上运行我的项目时遇到问题。所以当我尝试在 localhost 上启动我的项目时,它给了我这个错误:

Deprecation Error

这不是我的项目的问题,这个确切的项目上周正在运行,现在我的项目都无法正常运行。为了确保这不是我的项目,我进入文件资源管理器并用 chrome 打开了 index.html 文件,它只运行了 index.html,我引入的脚本都没有工作。我不知道该怎么做才能解决这个问题。如果有人可以提供帮助,那就太好了。

【问题讨论】:

  • 我会寻找在没有回调的情况下调用异步函数的代码 - 如果您没有进行任何更改,也没有更新 nodejs,那么与上周
  • 这不是错误,而是警告。要修复它,不要使用代码(您自己的或库中的),这些代码使用没有回调的异步函数。
  • 正如@Flimzy 所指出的,这是一个弃用警告。很可能您的节点版本已更新,现在它让您知道这种用法以前可以,但现在不鼓励使用。最近,我在编写一个写入文件的快速脚本时遇到了它。因为我不需要任何回调,所以我必须使用 writeFileSync,这样我就不会收到错误。只需在您的代码中寻找类似的用法并根据需要进行调整。
  • @Christopher 我修好了。我不得不卸载并重新安装 nodejs。这很奇怪,因为我安装了 node v7.8.0。现在我有 v6.10.1 。我不知道这两个版本的区别。如果你们中的一个人能详细说明这将是有帮助的差异。
  • 使用nvm或n切换安装不同版本的node。

标签: javascript node.js


【解决方案1】:

我安装了节点 v7.8.0,这给我带来了问题。我卸载了那个版本并安装了节点 v6.10.1,它解决了这个奇怪的问题。

【讨论】:

  • 我建议您仍然注意警告并尽可能更新您的代码。出于正当理由,该用法在最新版本中已被弃用。保留旧版本暂时可以避免警告,但与利用新节点版本中性能、安全性和功能的持续改进相比,这并不是一个好的长期解决方案。
【解决方案2】:

同时,回到以前的版本是可行的,但从长远来看不会解决问题,而且您将无法享受新的修复、更新和升级带来的好处。

函数调用时会导致该警告的一个示例是函数

fs.readFile(path[, options], callback)

如果没有回调,就会出现警告。

为了防止警告并实现回调,例如:

const fs = require('fs');
fs.readFile('./good.txt', 'utf8', function read(err, data) {
        if (err) {
            throw err;
        }
        content = data;
        // call the next step here
        console.log(content); // content display
    it
    });

回调函数read(),做了两件事,

  1. 它根据编码获取数据的内容,在本例中指定为utf8。
  2. 然后捕获并抛出错误(如果有任何错误)。

注意:如果您希望文件是人类可读的,编码是必要的

【讨论】:

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