[英]async await inside async.parallel, callback became undefined
我正在尝试在async.parallel中进行异步/等待,但无法调用回调。 但是,如果我删除异步/等待,则可以调用该回调。 下面是代码
let parallelFunc = listCamId.map(camId => {
return async function (callback) {
let insertRuleTransParam = {
rule_id: ruleId,
camera_id: camId,
vas_id: vasId,
additional_parameter: additionalParameter
}
let configParamCamera = { where: { id: camId } };
let configParamRule = { where: { id: ruleId } };
try {
let ruleTrans = await createRuleTransaction(insertRuleTransParam);
let rule = await ruleService.find(configParamRule, "one");
let cam = await cameraService.find(configParamCamera, "one");
let uri = await constructCamUri(cam.protocol, cam.user_access, cam.password, cam.ip_address, cam.port, cam.path);
let visionParam = await startVasRule(vasId, ruleTrans.id, camId, rule.rule_path, rule.rule_exec, uri);
let updateRuleParam = {
port_stream: visionParam.port,
url_stream: visionParam.url,
mmap_in: visionParam.mmap_in,
mmap_out: visionParam.mmap_out
}
await updateRuleTransaction(updateRuleParam);
callback(null);
} catch (e) {
callback(e);
}
}
})
return new Promise((resolve, reject) => {
async.parallel(parallelFunc, function (err, results) {
if (err) {
reject(err);
} else {
resolve('success');
}
})
});
有人可以指出代码有什么问题吗?
不要将async.js
库用于async.js
代码,也不要使用回调参数。 只需使用Promise.all
等待多件事:
let promises = listCamId.map(async function(camId) {
let insertRuleTransParam = {
rule_id: ruleId,
camera_id: camId,
vas_id: vasId,
additional_parameter: additionalParameter
}
let configParamCamera = { where: { id: camId } };
let configParamRule = { where: { id: ruleId } };
let ruleTrans = await createRuleTransaction(insertRuleTransParam);
let rule = await ruleService.find(configParamRule, "one");
let cam = await cameraService.find(configParamCamera, "one");
let uri = await constructCamUri(cam.protocol, cam.user_access, cam.password, cam.ip_address, cam.port, cam.path);
let visionParam = await startVasRule(vasId, ruleTrans.id, camId, rule.rule_path, rule.rule_exec, uri);
let updateRuleParam = {
port_stream: visionParam.port,
url_stream: visionParam.url,
mmap_in: visionParam.mmap_in,
mmap_out: visionParam.mmap_out
}
await updateRuleTransaction(updateRuleParam);
return null;
});
return Promise.all(promises);
您可以在async.js中使用async / await
您的代码中存在一个主要错误:
return async function (callback) {}
异步函数不需要或不需要callback
,它们是Promises
简写
这是一个将在async.js中运行的async function
的简单示例:
async function forAsync() {
try {
let user = await db.findOne({});
return user // this is equivalent to resolve(user)
} catch (e) {
throw(e) // this is equivalent to reject(err)
}
}
作为一个Promise
它将如下:
function forAsync() {
return new Promise((resolve,reject) => {
db.findOne({}, (err,res) => {
if (err) reject(err)
let user = res;
resolve(user);
});
}
}
作为callback
,如下所示:
function forAsync(callback) {
db.findOne({}, (err,res) => {
if (err) callback(err)
let user = res;
callback(null, user);
});
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.