tho*_*ter 4 javascript mysql node.js
目前,这是我使用node-mysql执行查询的方式
client.query( sql, function( error, result ) {
console.dir( result );
});
Run Code Online (Sandbox Code Playgroud)
我想同步这样做,就像这样
var result = client.querySync( sql );
console.dir( result );
Run Code Online (Sandbox Code Playgroud)
我理解为什么在节点中阻塞是坏的,但我(几乎)长大到足以知道什么时候可以,什么时候没有.我只打算在任何事件循环之外的初始化阶段进行同步调用.
有人知道我怎么能做到这一点吗?
编辑...
有点......
client.querySync = function( sql )
{
var called = false;
var result;
while ( typeof result == 'undefined' ) {
if ( ! called ) {
called = true;
this.query( sql, function( error, _result ) {
result = { error: error, result: _result };
});
};
}
return result;
};
Run Code Online (Sandbox Code Playgroud)
您提出的解决方案(在您的编辑中)将无法工作,因为您永远不会放弃该线程(因此永远不会调用回调,因此永远不会设置变量,因此您的循环永远不会中断).节点不是多线程的 - 任何时候都只有一个线程执行javascript.除了从正在运行的代码返回之外,没有办法产生该线程.
所以,你不能做你想做的事.您可以尝试使用一些在同一场景中重新编写同步代码的解决方案,但我个人发现这种方法并不值得付出努力 - 只需咬紧牙关就行了一切都有回调(随着时间的推移痛苦消退:).