首页 > 开发 > NodeJS > 正文

javascript 怎么在回调函数内,修改外部变量?

2017-09-08 17:34:47  来源:网友分享

想给变量数组填充内容,但是发现回调后,因为作用域的原因而没有改变原值

       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的值填充完后再调用?

解决方案

如果要保障循环中的异步请求都返回时才进行下一步,请使用相应的流程管理工具,比如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		}	});};