如何将从异步方法返回的值发送到javascript中的另一个异步方法?

时间:2016-04-12 06:47:38

标签: javascript asynchronous

我将任务定义为对象数组。 getHbaseAllCountries将所有国家/地区代码作为数组返回,我尝试将其存储在变量selectedCountries中。我将此var selectedCountries []传递给getComponentsGraphData以获取数据。但是当我console.log(selectedCountries)它给我空数组[]时,虽然我添加了一个回调。

var tasks = [{
    func: 'getHbaseAllCountries',
    options: options
}];
var results = [];
var selectedCountries= [];
async.forEach(tasks, function(value, callback) {
    if(value["func"] === 'getHbaseAllCountries') {
        cmodel.getHbaseAllCountries( value["options"],function(err, values) {
            if (err) {
                v.send(err);
                return;
            }
            for(var index=0; index< values.length; index++){
                selectedCountries.push(values[index].key);
            }   
            console.log(selectedCountries);// prints the desired results
            callback(err,values);
        });
    }
    console.log(selectedCountries);// prints []
    cmodel.getComponentsGraphData(type, selectedCountries, value["country"], value["model"], function(err, data) {
        //console.log("Data for: " + JSON.stringify(value));
            results.push({
            _id: value["key"],
            data: data
        });
        callback(err, data);
    }); 
}, function(err) {
    if (err) {
        v.send(err);
        return;
    }
    v.send(results);
});

1 个答案:

答案 0 :(得分:0)

您致电 $this->SetLineWidth( 1 ); $this->Image($image_file, 10, 10, 15, '', 'JPG', '', 'T', false, 300, '', false, false, 1, false, false, false); ,但不知道您的请求getComponentsGraphData是否已结束。您应按照评论中的建议移动getHbaseAllCountries的来电。此外,使用链式承诺会更好。

getComponentsGraphData