首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ES8等电话不是在等我

ES8等电话不是在等我
EN

Stack Overflow用户
提问于 2018-02-28 09:55:51
回答 1查看 277关注 0票数 0

我的问题是,我试图等待一些承诺,但我的等待调用似乎马上返回到调用函数。

在下面的代码中(控制器函数处理POST的一部分),在执行承诺之前执行我的函数调用之后的“文件出站”日志。我的异步函数似乎在“等待”调用时返回。

然而,“等待”仍然等待所有承诺的执行,因此“我刚刚完成等待”日志确实正确地将魔术变量插入到req.files中。

代码语言:javascript
复制
const upload = multer({
  storage: multer.diskStorage ({
    destination: (req, file, cb) => { cb(null, config.DESTINATION) }
  })
}).array(config.FIELD_NAME);

exports.upload_image = function(req, res) {

  upload(req, res, (err) => {
    if (err) {
      return res.end("error uploading file");
    } 
    // got file ok, do validation
    checkAreDicom2( req.files );
    console.log("files coming out: ", req.files);

    return res.end("OK");

  });
}

async function checkAreDicom2(inFiles) {

  let promises = inFiles.map(function (file) {
    return new Promise( function (resolve, reject) {
      fs.createReadStream(file.path,{start: 128, end: 131, autoClose: true})
      .on('error',reject)
      .on('data', (chunk) => file.magic = file.magic ? file.magic += chunk : chunk)
      .on('end', resolve);
    });
  });
  await Promise.all(promises);

  console.log("i just finished waiting: ", inFiles);
  return;

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-28 10:50:51

await正在等待Promise.all,它正确延迟之后的日志。但是,它当然不会阻塞函数的调用方。

因此,upload_image中的回调不会等待异步处理,它只会收到checkAreDicom2(…)返回的承诺--并放弃它,并立即记录某些内容。您需要再次显式地等待异步结果。

代码语言:javascript
复制
exports.upload_image = async function(req, res) {
  try {
    await new Promise((resolve, reject) => {
      upload(req, res, (err) => {
        if (err) reject(err);
        else resolve();
      });
    });
    // got file ok, do validation
    await checkAreDicom2( req.files );
//  ^^^^^
    console.log("files coming out: ", req.files);

    return res.end("OK");
  } catch(err) {
    return res.end("error uploading file");
  }
};
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49026614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档