node.js:导出嵌套匿名异步函数中包含的变量

标签 node.js asynchronous

如何导出变量(如下面的“数据”),以便我可以将下面的函数用作模块:

//fooreader.js
var fs = require("fs");
var fileName = "foo.txt";

fs.exists(fileName, function(exists) {
  if (exists) {
    fs.stat(fileName, function(error, stats) {
      fs.open(fileName, "r", function(error, fd) {
        var buffer = new Buffer(stats.size);
        fs.read(fd, buffer, 0, buffer.length, null, function(error, bytesRead, buffer) {
          var data = buffer.toString("utf8", 0, buffer.length);
          console.log(data);
          fs.close(fd);
        });});});}});

我想像模块一样使用它:

//consumer.js
var fooreader = require('fooreader.js');
console.log(fooreader());

我知道,考虑到异步读取,这可能有点天真,所以我尝试将“fooreader”放入接受回调的函数中:

//fooreader.js
var fs = require("fs");
var fileName = "foo.txt";

var fooreader = function(callback){
fs.exists(fileName, function(exists) {
  if (exists) {
    fs.stat(fileName, function(error, stats) {
      fs.open(fileName, "r", function(error, fd) {
        var buffer = new Buffer(stats.size);
        fs.read(fd, buffer, 0, buffer.length, null, function(error, bytesRead, buffer) {
          var data = buffer.toString("utf8", 0, buffer.length);
          console.log(data);
          fs.close(fd);
          callback(data);
        });});});}});};
module.exports = fooreader;

并尝试过:

//consumer.js
var fooreader = require('fooreader.js');
fooreader(callback);
var callback = function(data){    
  console.log(data);
}

并得到“TypeError:未定义不是一个函数”。如何使回调起作用?

最佳答案

如果我使用匿名函数来处理回调,它就会起作用。有意义,因为它将函数传递回模块......

//consumer.js
var fooreader = require('fooreader.js');
fooreader(function (data){    
  console.log(data);
});

关于node.js:导出嵌套匿名异步函数中包含的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21077424/

相关文章:

reactjs - 如何调度等待其他异步操作完成的 redux 操作?

javascript - 使用流式 JSON 输出构建简单的 Nodejs API

node.js - 请求 X509 证书

node.js - Testcafe:找不到资源的 dns 记录

javascript - 切换到基于 promise 的数据库,现在我的登录完全损坏了

swift - 实现DispatchQueue的正确方法

node.js - 直接从 Lambda/tmp 文件夹播放音频

Java Google 数据存储异步调用

.net - 带超时的 F# 异步工作流

Python Asyncio 阻塞协程