Когда переменная является результатом процесса 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
?
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'
, если произошла ошибка.
Да, ключевое слово await
используется для развертывания обещаний (которые возвращает axios.post()
). Следующие два примерно эквивалентны во всех случаях:
const a = await p();
b(a);
// and
p().then(a => b(a));
В вашем конкретном случае вы добавили обработчик .catch()
, который ничего не возвращает. Таким образом, в случае ошибки вы получите console.log
ошибки (которую вы должны изменить на console.error()
как минимум), и res
будет назначен {{ Х4 } } .
Вы должны использовать попробовать поймать с ожиданием
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)
}
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.