如何在函数内的async.eachSeries循环内返回多个get请求的响应

时间:2016-08-06 04:07:57

标签: javascript jquery asynchronous callback get

我正在尝试返回一个新数组,该数组是通过组合来自多个get请求的数组创建的。新数组在async.eachSeries async library函数内正确返回,但父函数返回undefined。

我的理解是父函数内的返回与async.eachSeries()同步运行(在它完成之前),这会导致父函数返回undefined

var array_strings = [ “someUrl”, “someUrl”, “someUrl” ]

function get_forEachUrlString(base_url, array_strings) {
    …
    var combinedArray = [];
    var mergedArray = [];
    …
    async.eachSeries(array_strings, function(item, done) {
        …
        $.get(bas_url+item, function(data) {
            …
            combinedArray.push(data)
            done(); // stopping the async looping
            mergedArray = [].concat.apply([], combinedArray); // Merging the array of combined arrays
        });
    }, function(err) {
        if (err) {
            throw err;
        }
        console.log("All requests are done");
        console.log(mergedArray); // logs correct array
        return mergedArray
    });
    console.log(mergedArray); // logs [] empty array
    return mergedArray // Hoping this would return the newly created mergedArray
}

get_forEachUrlString(“someBaseUrl”, array_strings) // Attempting to return mergedArray

// this function tries to call the mergedArray, but returns undefined
function initialRender() {
    …
    console.log(merged) // returns undefined
} 

我一直在寻找一种方法来让父函数get_forEachUrlString()返回async.eachSeries函数产生的值。我相信我需要进行回调,但在尝试了几种不同的组合后,我仍然难倒。

如何获取我创建的新数组,mergedArray从函数get_forEachUrlString()返回?

编辑:我没有提到我试图在get_forEachUrlString()内调用initialRender()的返回值。请参阅下面的答案,了解我的解决方法。

1 个答案:

答案 0 :(得分:0)

经过一些试验和错误,我能够让这个工作。我试图放置任意数量的回调,但我真正需要做的是将initialRender()函数放在get_forEachUrlString()函数中并将新的mergedArray值传递给initialRender()函数

所以正确的设置看起来像这样。

function get_forEachUrlString(base_url, array_strings) {
    …
    async.eachSeries(array_strings, function(item, done) {
        …
    }, function(err) {
        …
        mergedArray = [].concat.apply([], combinedArray);
        initialRender(mergedArray);
    });
}

get_forEachUrlString(“someBaseUrl”, array_strings)

然后initialRender()返回它应该的内容。