在NodeJS中callback之外的variables

我对NodeJS和JavaScript一般都比较陌生。 这是我的脚本:

var data = []; client.query( 'SELECT * FROM cds', function selectCb(err, results, fields) { if (err) { throw err; } console.log(results); console.log(fields); data.push(results); } ); console.log(data); 

我怎样才能访问callback以外的results (或data )var? 运行查询时,我不希望在对方内写入大量的callback。

你所要求的是同步(或阻塞)执行,这与node.js的devise和精神真正相反。

像JavaScript一样,节点是单线程的。 如果你有阻止代码,那么整个过程就停止了

这意味着你必须使用callback函数来处理需要很长时间的事情(比如从数据库查询)。 如果你正在编写一个一次通过的命令行工具,你可能愿意忍受这个阻塞。 但是,如果你正在写任何types的响应式应用程序(如网站),那么阻止就是谋杀。

所以有人可能会给你一个关于如何使这个阻塞,同步调用的答案。 如果是这样,如果你实施它,你做错了。 你也可以使用像Ruby或Python这样的multithreading脚本语言。

编写callback并不是那么糟糕,但是它需要一些关于架构和包装的想法,而对于那些习惯于这种风格的人来说可能并不熟悉。

Node.js对所有asynchronous接口使用Continuation Passing Style 。 围绕这个问题以及为了减轻嵌套callback的痛苦而创build的模块有很多讨论。 有一段时间有传言说node.js可能会开始在v0.7.x分支中重新引入Promise到它的核心,但是我不确定这是否正确。

在上面的链接中使用stream控制库之一(或者自己动手),你可能不得不使用嵌套的callback,或者简单地为callback提供一个函数引用。 例如,

 var data = [], handler = function(err, results, fields) { if (err) { throw err; } ... }; client.query('SELECT * FROM cds', handler);