当变量是await
过程的结果时,该过程是否一直在等待“ waiting”变量?
我尝试过并且一直等待,但是我想知道是否有例外。
例如:
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 :(得分:1)
否,正在等待,直到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 :(得分:0)
是的,await
关键字用于解包承诺(axios.post()
返回)。以下两种情况在所有情况下大致相同:
const a = await p();
b(a);
// and
p().then(a => b(a));
在您的特定情况下,您添加了一个.catch()
处理程序,该处理程序不返回任何内容。因此,在发生错误的情况下,您将获得错误的console.log
(至少应将其更改为console.error()
),并且res
将被分配{ 1}}。
答案 2 :(得分:-1)
您应将try catch与await配合使用
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)
}