javascript 怎么在回调函数内,修改外部变量?
想给变量数组填充内容,但是发现回调后,因为作用域的原因而没有改变原值
var list = new Array(); function get_time_line(){ var value = new Array();//value是一个空数组 list.forEach(function(key,i){ db.hget(key, 'time_line', function(err,reply) { value[key]=reply; //这里想读取redis的相应值,给value填充内容 }); }); res.render('index', {value : value}); console.log(value);//但是输出却是空的[] db.quit; }; function get_Index(){ db.keys('tencent:uid:*', function (err, replies) { replies.forEach(function (key, i) { list.push(key); }); get_time_line(); }); }
请问怎么才能把value的值填充完后再调用?
丶灬11区住民
11 years, 4 months ago
Answers
如果要保障循环中的异步请求都返回时才进行下一步,请使用相应的流程管理工具,比如async https://github.com/caolan/async
var async = require('async'); function get_time_line() { var list = []; // List 不能为一个空数组,不然循环个屁啊 var getValue = function(li,oneDone){ // li.key 是你每个数组元素中的参数,你自己改吧 db.hget(li.key, 'time_line', function(err, reply) { // 存到每个元素里去 li['newValue'] = reply; // 做好了 oneDone() }); } async.each(lists,getValue,function(err,result){ if (!err) { // 全都抓完了,输出最后有newValue的list console.log(lists); // do sth. else } }); };
欧泥酱一库哟
answered 11 years, 4 months ago