想给变量数组填充内容,但是发现回调后,因为作用域的原因而没有改变原值
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
}
});
};
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。