在nodejs中返回具有异步函数的值

时间:2012-09-23 17:07:08

标签: node.js

我有这个功能:

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;

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

1 个答案:

答案 0 :(得分:1)

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

现在您有几种方法可以解决此问题:

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

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

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

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