1

我有这个功能:

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
  }
  });
}

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

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

4

1 回答 1

1

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

现在,您有几种解决此问题的方法:

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

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

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

  • Call fs.readFile and "wait" for its callback to return. This basically means active waiting with a while(true) loop, and is definitely considered bad practice. Anyway, technically it is viable. For the rare case you really want to do this, or you are simply interested in how one might implement something like this, check out syncasync.js.
于 2012-09-23T17:16:06.693 回答