请教一个操作数据库的异步问题 如题,请问各位大大:
我现在有一个数据库的操作,封装在一个函数例如myfunc里面,执行myfunc会往数据库插入数据,现在有一个程序段代码大概如下:
==================================================================== //代码段如下:
myfunc( someData); //往数据库插入data数据, 数据较多,会执行很多次插入操作,且耗时较久
/* 紧接着myfunc的一些代码*/
............
............
response.write('xxxxx')
====================================================================
请问: 在不使用数据库的回调函数的操作下,如何让myfunc后的代码在myfunc执行后才执行?
myfunc的代码可以类似以下:
function myfunc( someData){
/* 省略处理代码 */
for( /*循环条件*/ ){
mysql.query(' INSERT INTO XX (field1, field2) VALUES( xx, yy ) ',
function(err,ret){ }
);
}
}
木有其他办法了 除非你用一些异步处理框架,实际上都是用回调
如果是用回调的话,又不影响现有代码的执行顺序,请问有什么法子? 我想用一个变量做标识, 请问可行不?
我现在尝试了把myfunc封装到一个类里,再继承系统的Emitter类, 然后在数据库的回调函数里注册事件,但是这样只能标识一次数据库操作是否结束,无法判断全部操作是否结束
的确是新人哎,刚学了一个星期不到~
//Like this:
function myfunc(someData){
/* 省略处理代码 */
for( /*循环条件*/ ){
(function(i){ //这里使用闭包来保存变量i
mysql.query(' INSERT INTO XX (field1, field2) VALUES( xx, yy ) ',
function(err, ret){
if(i == ret.length - 1){
//在这里所有数据库操作完成
}
}
);
})(i);
}
}
其实用计数也很简单,在每次成功插入的回调里+1,并同时判断是否完成,若完成执行后面代码
@italkboy 嗯嗯,明白了哈。
你的for要是太大的话,会出现错误的,类似这个
嗯嗯,用计数是一个办法。 看来要保证node里面代码的同步也只有回调跟计数两张办法了