【问题标题】:Understanding Async in node js using promises使用 Promise 理解节点 js 中的异步
【发布时间】:2015-06-18 03:04:20
【问题描述】:

我正在尝试理解以下问题:

var fs = require('fs');
var Promise = require('bluebird');

Promise.promisifyAll(fs);

fs.readFileAsync('read.js','utf8').then(function(content) {
  console.log(content);
}).catch(function(error) {
  console.log(error);
});

我明白,既然我在承诺 fs 库,我可以使用 readFileAsync 作为承诺。但如果我将readFileAsync 的名称更改为readFileAs,我会收到以下错误:

C:\Users\nniranja\Venkat\promises_github.js:17
fs.readFileA("read.js",'utf8').then(function(content)
   ^
TypeError: undefined is not a function
    at Object.<anonymous> (C:\Users\nniranja\Venkat\promises_github.js:17:4)
    at Module._compile (module.js:460:26)
    at Object.Module._extensions..js (module.js:478:10)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Function.Module.runMain (module.js:501:10)
    at startup (node.js:129:16)
    at node.js:814:3

请帮助我理解异步的重要性。谢谢。

【问题讨论】:

  • 根本没有名称为readFileA的方法!我的意思是,你希望fs.niranjan() 做什么?完全一样。
  • But if i change the name of readFileAsync to readFileAs - 你是在重新分配还是什么?
  • @thefourtheye:我只是将方法名 readFileAsync 改成 readFileAs/readFileA 并再次执行代码。
  • @NiranjanUpadhya 你能展示你尝试过的实际完整代码吗?
  • var fs=require('fs'); var Promise=require('bluebird'); Promise.promisifyAll(fs); fs.readFileA("read.js",'utf8').then(function(content) { console.log(content); }).catch(function(error) { console.log(error); })跨度>

标签: javascript node.js methods bluebird


【解决方案1】:

readFileAs 不是 fs 模块中的函数,也不是 bluebird 将添加到模块中的属性。所以,预计没有找到readFileAs函数。

【讨论】:

    【解决方案2】:

    普通节点调用成对出现

    • readFile
    • readFileSync

    当您 promisify 一个库时,Bluebird 库定义了诸如 readFileAsync 之类的函数,所以这些就是您要调用的函数。

    @AndrewEisenberg 是正确的,看起来您的键盘无法显示字母,因为您的问题中有 readFileAsyncreadFileAsreadFileA

    密切注意您在编码中输入的内容 - 每个字符都很重要!

    【讨论】:

      【解决方案3】:

      根据documentationreadFileAs 不是受支持的函数,因此它不是异步问题。

      【讨论】:

        【解决方案4】:

        fs library 上不存在您尝试使用的方法 readFileAs,这就是您看到该错误的原因。

        为了读取文件而存在的唯一文件是:

        • read
        • readSync
        • readFile
        • readFileSync

        根据bluebird documentation, 在您调用 Promise.promisifyAll(fs); 之后,您可以完全按照文档中的说明使用 fs 的 方法,除了在方法调用中附加 Async-suffix 并使用 promise 接口而不是回调接口。

        因此,按照 API 文档,您只需将 Async-suffix 附加到 fs 库中存在的方法(如上面列出的方法)。

        【讨论】:

        • :我不知道 bluebird 添加了 Async 关键字,谢谢。你能给我一些链接来理解 bluebird promises。
        • bluebird 文档很棒,看看这个partpromisification 的解释。
        猜你喜欢
        • 2019-04-11
        • 1970-01-01
        • 1970-01-01
        • 2020-03-30
        • 1970-01-01
        • 2019-02-12
        • 2021-10-29
        • 1970-01-01
        • 2018-09-03
        相关资源
        最近更新 更多