【发布时间】:2014-07-21 16:03:49
【问题描述】:
我有一个 async.map 必须在其上运行的数组。就每个数组对象的并行运行而言,该功能很好,它被记录为“...的结果”。但是,迭代函数的返回回调似乎用准备好的最后一个对象的结果覆盖了第一个数组对象,记录为“最终结果...”。
async.map(array, getInfo, function (asyncError, asyncStatus)
{
if(asyncError)
{
return callback(asyncError);
}
else
{
console.log(' Final Result <<<<<<<<<<<------- '+JSON.stringify(asyncStatus));
//return callback(null, asyncStatus);
}
});
function getInfo(passedArray, callback)
{
Analyser(passedArray.productName, passedArray.productPurchaseRecord, function(opError, opStatus)
{
if(opError)
{
return callback(opError);
}
else
{
console.log(' Result for '+passedArray.productName+' ------->>>>>> '+JSON.stringify(opStatus));
return callback(null, opStatus);
}
});
}
输出:-
Result for bmwX1 ------->>>>>> [{"month":"January","totalSales":8,"newOrders":3}]
Result for AudiA4 ------->>>>>> [{"month":"January","totalSales":11,"newOrders":4}]
Final Result <<<<<<<<<<<------- [[{"month":"January","totalSales":8,"newOrders":3}],[{"month":"January","totalSales":8,"newOrders":3}]]
【问题讨论】:
-
什么是
Analyser?有可能重用对象吗?你的异步逻辑对我来说很好。 -
@loganfsmyth Analyzer 是一个子功能,它使用passedArray 对象进行一些数据分解/分析并返回一个数组,该数组由“opStatus”接收并打印为“Result for ...”[侧边栏]我已经尝试过异步每种方法。它似乎也有一个问题,尽管在那里,只要每个中的并行控制流返回一个对象,我就会将对象推送到一个数组中。问题似乎出现在推送完成时,在一个公共数组中推送的最后一个对象正在覆盖所有其他对象,其中数组的大小保持为“n”个对象。
标签: javascript arrays node.js asynchronous