Могу ли я установить значение переменной во время ожидания функции asyn c? - PullRequest
0 голосов
/ 09 мая 2020

У меня есть асинхронная c функция fileUpload(), которая загружает файлы на сервер и возвращает обещание, когда это будет сделано. Когда пользователь хочет отправить другую форму, submitForm() будет await fileUpload перед отправкой формы.

Пока он ждет await fileUpload, я хотел бы сообщить пользователю, что система ожидает загружает в фини sh. Вот что я представил (но, очевидно, не может работать):

async fileUpload() {
   await Promise.all(
   // Does a for loop here and uploads all files
   )
}

async submitForm() {
  const FormBody = new FormData();

  await fileUpload; // I want to set this.IsUploading = true if awaiting. If not awaiting, then this.IsUploading = false; 

  this.$axios.post('/api', FormBody)
}

Я использую await fileUpload без скобок, потому что, если я сделаю await fileUpload(), он снова вызовет эту функцию. Но как я могу установить this.IsUploading на true, ожидая fileUpload() до fini sh, а затем установить false, если ждать больше нечего?

Ответы [ 2 ]

2 голосов
/ 09 мая 2020

Может просто установить переменную до и после вызова await?

this.IsUploading = true;

await fileUpload;

this.IsUploading = false;
1 голос
/ 09 мая 2020

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

  1. Я думаю, что это лучший и самый правильный способ, он вызовет вашу функцию только один раз, возможно, проблема в другом вещь?
async submitForm() {
  const FormBody = new FormData();

  await fileUpload();

  this.$axios.post('/api', FormBody)
}
Вы можете установить значение true и подождать, пока fileUpload() что-то не вернет:
async submitForm() {
  const FormBody = new FormData();
  this.IsUploading = true;

  if (await fileUpload()) this.IsUploading = false;

  this.$axios.post('/api', FormBody)
}
Или просто измените его сразу же после получения ответа от fileUpload(), как сказал Джек Башфорд:
async submitForm() {
  const FormBody = new FormData();
  this.IsUploading = true;

  await fileUpload();
  this.IsUploading = false

  this.$axios.post('/api', FormBody)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...