javascript - async.parallel 内的 async wait,回调变得未定义

标签 javascript node.js asynchronous

我试图在 async.parallel 中执行 async/await,但无法调用回调。但是如果我删除 async/await,则可以调用回调。下面是代码

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 库用于 Promise 代码,也不要使用回调参数。只需使用 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);

关于javascript - async.parallel 内的 async wait,回调变得未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50177592/

相关文章:

javascript - 在 ASP.net 中将 Canvas 作为图像保存到服务器

mysql - ReferenceError:未定义连接nodejs mysql

javascript - 如何获取node.js中正在运行的进程数

node.js - 发布新版本包时获取电子邮件通知

javascript - 加载 webvr 场景时出现黑屏

javascript - 根据同一表行中输入框的最高值查找元素

javascript - 在 RxJS Observable 的 onNext 中等待异步操作

javascript - 如何强制 javascript 等待/阻塞,直到延迟的作业完成?

c++ - 在多线程场景中提升 asio async_receive_from 缓冲消息

javascript - 为 td 添加背景颜色