javascript - 如何在 nodejs 中使用异步地图系列?
问题描述
我正在使用异步地图系列来操作数组。
exports.MultiChannelInvoke = async function (bulkUploadArray) {
async.mapSeries(bulkUploadArray, async function (array, cb) {
let ap = array[0]
let apArray = ['PL', 'A', 'J', 'V', 'I'];
if (!apArray.includes(ap)) { // For Array's first value it is KL & it is getting inside this loop
//some manipulation
}
else {
//some manipulation
}
}, (err, results) => {
if (err) {
masterResult = { message: 'Failed During async Map', errorMessage: err }
} else {
let mongoData = batch;
uploadsummary.create(mongoData)
masterResult = { FinalResults: results }
}
})
return masterResult
}
我的 bulkupload 数组将如下所示:
[
[
"KL",
{
"ms": "2147766904",
"desc": "APP-LIC JEEVAN POLICY,7878787878,30/01/19",
"ur": "DNDSER6911744",
"tap": "TA",
"tapupdate": [ "Array" ]
}
],
[
'PL',
{
ms: '3147766904',
desc: 'APP-LIC JEEVAN POLICY,9916957781,30/01/19',
ur: 'DNDSER6911745',
tap: 'TA',
tapupdate: [ Array ]
}
]
]
因此,根据我的 bulkupload 数组的第一个值是 KL 并且它进入了第一个 if 循环。(我在代码的注释中提到过)。因此,在进入并进行操作之后,它没有考虑第二个数组值。完成对第一个值的操作后,直接返回结果。谁能告诉我我做错了什么?或者我不应该使用异步地图系列。请给我建议。
解决方案
首先,创建一个函数async-await
不会在处理完所有内容后自动返回值。return masterResult
将在async.mapSeries
您需要做出承诺并返回之前执行。
此外,如果您在async-await
内部使用,则async.js
需要从异步函数返回数据以将其视为结果。
这是一个包含我上面所说的版本:
const MultiChannelInvoke = function (bulkUploadArray) {
return new Promise((res, rej) => { //make promise
async.mapSeries(bulkUploadArray, async function (array) { //no cb required
let ap = array[0]
let apArray = ['PL', 'A', 'J', 'V', 'I'];
if (!apArray.includes(ap)) { // For Array's first value it is KL & it is getting inside this loop
return 'IF!'
}
else {
return 'ELSE';
}
}, (err, results) => {
if (err) {
rej({ message: 'Failed During async Map', errorMessage: err }); //reject
} else {
res(results); //resolve
}
})
})
}
MultiChannelInvoke([['KL',
{
ms: '2147766904',
desc: 'APP-LIC JEEVAN POLICY,7878787878,30/01/19',
ur: 'DNDSER6911744',
tap: 'TA',
tapupdate: [Array]
}],
['PL',
{
ms: '3147766904',
desc: 'APP-LIC JEEVAN POLICY,9916957781,30/01/19',
ur: 'DNDSER6911745',
tap: 'TA',
tapupdate: [Array]
}]]).then(console.dir);
输出:
[ 'IF!', 'ELSE' ]
推荐阅读
- mediapipe - Mediapipe:如何正确释放 MPPGraph
- clips - 如何在 CLIPS 中进行 OR 和 AND 运算符?
- sql-server - 重新附加分离的数据库时权限正确错误
- resources - 位操作资源
- javascript - 图表 js - 将宽度设置为特定条形
- buffer - 缓冲点并将它们重叠以计算面积
- c - 双链表中的标头结构不起作用,可能是 addNode 函数错误?
- python - RuntimeError: You must setup() the GPIO channel first (4x4 Numpad on Raspberry Pi)
- django - 如何从 django 中的过滤查询集中访问值内的字段?
- swift - 如何在自定义开始和结束时间之间的自定义间隔设置通知