在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如何解决这个问题:
- 使用
fs.readFile
的同步版本,即fs.readFileSync
(请参阅http://nodejs.org/api/fs.html#fs_fs_readfilesync_filename_encoding )。 然后你可以照常返回结果。 - 改变你的function也使用callback。
所以,基本上这意味着:两个函数都必须是asynchronous的,或者两者都需要同步。
在这两个选项中,我更喜欢asynchronous的使用callback:这正是Node.js的核心能力 – asynchronous,非阻塞I / O。 所以,如果你没有足够的理由反对,坚持使用asynchronous版本并使用callback。
当然,您可能对其他选项存在感兴趣。 所以,他们在这里( 虽然我不会推荐它 ):
- 调用
fs.readFile
并等待其callback返回。 这基本上意味着主动等待一段while(true)
循环,而且肯定被认为是不好的做法。 无论如何,从技术上讲它是可行的。 对于罕见的情况,你真的想这样做,或者你只是想如何实现这样的事情,检查syncasync.js 。