Два асинхронных кода в двух разных файлах. Я хочу, чтобы они запускались один за другим, но они запускались одновременно - PullRequest
0 голосов
/ 07 августа 2020

Код во втором файле зависит от первого, поэтому я хочу, чтобы код первого файла выполнялся первым, а когда код первого файла завершает свое выполнение, должен выполняться код во втором файле. Код в первом файле в основном сохраняет изображение в облачном хранилище Google, а затем возвращает URL-адрес этого изображения, а второй файл обновляет схему публикации в MongoDB и помещает строку URL-адреса в массив изображений. Поскольку код в обоих файлах выполняется бок о бок, а код во вторых файлах не ждет, пока первый выполнит схему сообщения, обновляется даже до того, как первый код вернет все строковые URL-адреса, что является проблемой. Я хочу сначала получить все URL-адреса строки, а затем обновить схему публикации.

Итак, в первом файле у меня есть

function sendUploadsToGCS(req, res, next){
  if(!req.files){
    return next();
  }

 req.files.map((image, index) => {
  const gcsname = uuid() + image.originalname;
  const file = craigFilesBucket.file(gcsname);

  const stream = file.createWriteStream({
    metadata: {
      contentType: image.mimetype,
    }
  });

  stream.on('error', err =>{
    req.files[index].cloudStorageError = err;
    next(err);
  });

  stream.on('finish',  async () => {
    req.files[index].cloudStorageObject = gcsname;
    await file.makePublic();
    req.files[index].cloudStoragePublicUrl = getPublicUrl(gcsname);
    console.log(req.files[index].cloudStoragePublicUrl);
    next();
  });

  stream.end(image.buffer);
})

}

Во втором файле У меня

const addImagestoPost = async (req, res, next) =>{
  const errors = validationResult(req);
  if(!errors.isEmpty()){
    return next(new HttpError('Invalid inputs passed, please check your data.', 422))
  }

  const postId = req.params.pid;

  let post;
  try{
    post = await Post.findById(postId);
  }catch(err){
    const error = new HttpError(
      'Something went wrong could not update post',
      500
    );
    return next(error);
  }
  // if(!req.files[0] || !req.files[0].cloudStoragePublicUrl){
  //   return next(new HttpError('cloudStoragePublicUrl err.', 422))
  // }
  //images: req.files.cloudStoragePublicUrl,
  console.log('HEllo World');




  try{
    await post.save();
  }catch(err){
    const error = new HttpError(
      'Something went wrong, could not update post', 500
    )
  }

  res.status(200).json({post: post.toObject({getters: true})})
}

1 Ответ

1 голос
/ 07 августа 2020

Вы можете расположить свой код, как указано ниже:

const func1 = require(from file 1);
const func2 = require(from file 2);
async function load() {
    const result1 = await func1();
    const result2 = await func2()
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...