在nodejs中使用asynchronous函数返回值

我有这个function:

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; 即时通讯实际上返回作为parameter passing的匿名函数中的值。 使用nodejs在asynchronous编程中返回这个值的正确方法是什么? 使用var that = this;

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

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

现在你有几个select如何解决这个问题:

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

在这两个选项中,我更喜欢asynchronous的使用callback:这正是Node.js的核心能力 – asynchronous,非阻塞I / O。 所以,如果你没有足够的理由反对,坚持使用asynchronous版本并使用callback。

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

  • 调用fs.readFile并等待其callback返回。 这基本上意味着主动等待一段while(true)循环,而且肯定被认为是不好的做法。 无论如何,从技术上讲它是可行的。 对于罕见的情况,你真的想这样做,或者你只是想如何实现这样的事情,检查syncasync.js 。