【问题标题】:Async Parallel duplicate entries异步并行重复条目
【发布时间】:2015-11-25 21:14:45
【问题描述】:

所以我正在遍历一个名为 candidates 的数组,并使用数组中的每个项目执行某些任务,然后最后将结果推送到 Firebase candfb 。代码如下:

    var candidates = json.stageCandidates.candidate;
    var list = [];
    for (var i = 0; i < 20; i++) {
        var candidate = [];
        var id = candidates[i].candidateId;
        async.parallel([
            function(callback) {
                votesmart.getDetailedBio(id, function(err, json) {
                    if (!err && json.bio != undefined)
                        candidate.bio = json.bio;
                    callback();
                });
            },
            function(callback) {
                votesmart.getAddress(id, function(err, json) {
                    if (!err && json.address != undefined)
                        candidate.address = json.address.office[0];
                    callback();
                });
            },
            function(callback) {
                votesmart.getRating(id, function(err, json) {
                    if (!err && json.candidateRating != undefined)
                        candidate.ratings = json.candidateRating;
                    callback();
                });
            },
            function(callback) {
                votesmart.getVotes(id, function(err, json) {
                    if (!err && json.bills != undefined)
                        candidate.votes = json.bills;
                    callback();
                })
            },
            function(callback) {
                votesmart.getStances(id, function(err, json) {
                    if (!err && json.npat != undefined)
                        candidate.stances = json.npat;
                    callback();
                })
            }
        ], function() {
            candfb.push(candidate);
            // res.send(candidate);
        })
    };

现在的问题是,即使推送了 20 个项目(在循环中硬编码),也有一些项目重复,一些项目被跳过。有些项目可能是唯一的,而其他项目可能有多达 3 个副本被推送到 Firebase。我还检查了数组candidates 没有重复项。

我怀疑这可能是因为我使用了async.parallel(),但我不确定要更改什么才能使其正常工作。

【问题讨论】:

    标签: arrays node.js asynchronous firebase


    【解决方案1】:

    试试这个,它应该可以解决您的问题。将同步 for 循环与异步调用混合使用是一个常见错误。需要关闭i,否则会变异。

      var candidates = json.stageCandidates.candidate;
        var list = [];
        for (var i = 0; i < 20; i++) {
            (function(i){
                var candidate = [];
                var id = candidates[i].candidateId;
                async.parallel([
                    function(callback) {
                        votesmart.getDetailedBio(id, function(err, json) {
                            if (!err && json.bio != undefined)
                                candidate.bio = json.bio;
                            callback();
                        });
                    },
                    function(callback) {
                        votesmart.getAddress(id, function(err, json) {
                            if (!err && json.address != undefined)
                                candidate.address = json.address.office[0];
                            callback();
                        });
                    },
                    function(callback) {
                        votesmart.getRating(id, function(err, json) {
                            if (!err && json.candidateRating != undefined)
                                candidate.ratings = json.candidateRating;
                            callback();
                        });
                    },
                    function(callback) {
                        votesmart.getVotes(id, function(err, json) {
                            if (!err && json.bills != undefined)
                                candidate.votes = json.bills;
                            callback();
                        })
                    },
                    function(callback) {
                        votesmart.getStances(id, function(err, json) {
                            if (!err && json.npat != undefined)
                                candidate.stances = json.npat;
                            callback();
                        })
                    }
                ], function() {
                    candfb.push(candidate);
                    // res.send(candidate);
                })
            })(i)
        };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-05
      • 2018-03-08
      • 1970-01-01
      • 1970-01-01
      • 2020-05-22
      • 1970-01-01
      • 2015-02-19
      • 2013-03-25
      相关资源
      最近更新 更多