Когда переменная является результатом процесса await, ожидает ли процесс все время ожидающей переменной?

Я пытался, и это все время ждет, но я хотел бы знать, есть ли какие-либо исключения.

Например:

async imageUpload(id) {
        let formImageData = new FormData()
        formImageData.append('file', this.formImageFile)
        let res = await axios.post( '/db/imageUpload', {
          formImageData, 
          headers: {'Content-Type': 'multipart/form-data'}
        })
        .catch(err => {console.log(err)})
        alert(res)
    },

По моему опыту - но я новичок - «res» всегда готов к предупреждению, есть ли случай, когда предупреждение в variable = await resultFunction(); alert(variable) не будет ждать resultFunction() и, следовательно, предупреждение запрос будет быстрее и "переменная" будет undefined?

0
AMDP 2 Май 2019 в 09:53

3 ответа

Лучший ответ

Нет, ожидайте, пока Promise, возвращенный axios.post, не будет решен.

Но будь осторожен!

Если axios.post отклоняется, вызывается catch, а затем res будет значением, которое было возвращено вашей catch функцией.

Например:

axios.post обнаруживает ошибку 404 и отклоняет Promise. Это приведет к запуску вашей функции catch. err => {console.log(err)} возвращает неопределенное значение, поэтому res также будет неопределенным.

В этом случае:

let res = await axios.post( '/db/imageUpload', {
  formImageData, 
  headers: {'Content-Type': 'multipart/form-data'}
})
.catch(err => {
  console.log(err);
  return 'REJECTED';
})

res всегда будет результатом axios.post или 'REJECTED', если произошла ошибка.

1
Wendelin 2 Май 2019 в 07:08

Да, ключевое слово await используется для развертывания обещаний (которые возвращает axios.post()). Следующие два примерно эквивалентны во всех случаях:

const a = await p();
b(a);

// and

p().then(a => b(a));

В вашем конкретном случае вы добавили обработчик .catch(), который ничего не возвращает. Таким образом, в случае ошибки вы получите console.log ошибки (которую вы должны изменить на console.error() как минимум), и res будет назначен {{ Х4 } } .

0
Madara's Ghost 2 Май 2019 в 07:20

Вы должны использовать попробовать поймать с ожиданием

async imageUpload(id) {
  let formImageData = new FormData()
  formImageData.append('file', this.formImageFile)
  try {
    let res = await axios.post( '/db/imageUpload', {
      formImageData, 
      headers: {'Content-Type': 'multipart/form-data'}
    })    
  } catch (error) {
    console.log(error)
  }
  alert(res)
}
-1
Shubhanu Sharma 2 Май 2019 в 07:01