我正在尝试返回一个新数组,该数组是通过组合来自多个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()
的返回值。请参阅下面的答案,了解我的解决方法。
答案 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()
返回它应该的内容。