get()和set()是两个异步执行的函数,在for循环中我先get数据,然后set数据。
如下代码会出现以下情况:
点击(此处)折叠或打开
-
for(var i=1;i<=1000;++i){
-
var res = get("args"+i,function(err,data){
-
set("args"+i,data,function(err,result){});
-
})
- }
个人理解:异步不等待,因为循环的效率高于异步,所以轮到set执行时,i已经变成了1001;
怎么解决呢?
思维当时比较愚蠢的竟然这样,服了我自己了,在此记下,以便日后鄙视自己一下:
点击(此处)折叠或打开
-
for(var i=1;i<=1000;++i){
-
var res = get("args"+i,function(err,data){
- for(var i=1;i<=1000;++i){
-
set("args"+i,data,function(err,result){});
- }
-
});
- }
经过改正又想到定义一个全局变量再set函数中不使用i
点击(此处)折叠或打开
- var j=1;
-
for(var i=1;i<=1000;++i){
-
var res = get("args"+i,function(err,data){
-
set("args"+(j++),data,function(err,result){});
-
});
- }
于是又想到了这种方法:
点击(此处)折叠或打开
-
for(var i=1;i<=1000;++i){
- (function(idx){
- var res = get("args"+idx,function(err,data)
- set("args"+idx,data,function(err,result){});
-
});
- })(i);
- }