开发者社区> 问答> 正文

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

展开
收起
爵霸 2016-03-09 13:47:38 4656 0
1 条回答
写回答
取消 提交回答
  • 如果要保障循环中的异步请求都返回时才进行下一步,请使用相应的流程管理工具,比如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
            }
        });
    };
    2019-07-17 18:55:59
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
JavaScript异步编程 立即下载
Delivering Javascript to World 立即下载
编程语言如何演化-以JS的private为例 立即下载