【问题标题】:return values with async function in nodejs在nodejs中使用异步函数返回值
【发布时间】:2013-12-08 14:32:42
【问题描述】:

我有这个功能:

exports.readPartial = function(html, values, response) {
  fs.readFile(__dirname + "/../html/partials/" + html, function(error, file) {
  if(error) { this.loadError(response, error); }
  else {
   console.log("\t--> partial found: " + file);
   return file; // FILE VALUE
  }
  });
}

当该函数被调用时,它应该返回“file”的值。但是,当调用return file; 时,我实际上返回了我作为参数传递的匿名函数中的值。 在使用 nodejs 进行异步编程时返回这个值的正确方法是什么? 使用var that = this; ?

对这种编程风格感到很困惑。

【问题讨论】:

    标签: node.js


    【解决方案1】:

    您的 readPartial 函数依赖于异步函数 readFile。所以它也是异步的。

    现在你有几个解决这个问题的选择:

    所以,基本上这意味着:要么两个函数都必须是异步的,要么都需要同步。

    在这两个选项中,我更喜欢使用回调的异步选项:这正是 Node.js 的核心能力——异步、非阻塞 I/O。因此,如果您没有强烈的反对理由,请坚持使用异步版本并使用回调。

    当然,您可能对存在的其他选项感兴趣。所以,他们在这里(虽然我不推荐):

    • 调用fs.readFile 并“等待”其回调返回。这基本上意味着使用while(true) 循环主动等待,并且绝对被认为是不好的做法。无论如何,从技术上讲,它是可行的。对于您真正想要这样做的极少数情况,或者您只是对如何实现这样的事情感兴趣,请查看syncasync.js

    【讨论】:

    • 那么,推荐在同步模式下读取文件吗?如果多个主机正在使用 nodejs 应用程序怎么办?一些大文件会中断其他主机。还是推荐使用 readFileSync?
    • 不,最喜欢的选择是采用异步方式并使用回调。这就是 Node.js 特别擅长的:异步 I/O。 (更新了我的答案)
    猜你喜欢
    • 2013-09-27
    • 2018-12-12
    • 2015-10-08
    • 2015-04-21
    • 1970-01-01
    • 1970-01-01
    • 2020-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多