异步/等待过程的可变结果:我们是否总是在等待它?

时间:2019-05-02 06:53:07

标签: javascript

当变量是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

3 个答案:

答案 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)
}