如何在Vanilla JavaScript中进行异步调用

时间:2020-01-08 01:40:42

标签: javascript axios

通过将此链接放在html中,我设法使用了axios:

<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

我想做的是两次调用axios,一次是调用我的http请求以发送JSON对象,另一次是与JSON对象一起发送文件。我想要做的是使它同时被发送,这意味着用户不能只发送JSON对象本身或发送文件。但是,由于某些原因,我的代码未对此进行检查。我相信这是由于不存在异步,但是当我使用香草js时,idk如何添加它。这是我的代码:

 axios.post('/account/signup', userObj).then((profile)=>{
        //data returns current user info, including if they are verified or not
        return axios.post('/account/signup/veteranFile-upload', formData)
    }).then(()=>{
        //window.location.replace('/')
        console.log('Hello?')
    }).catch( function (error){
        showAppropriateTextSignUp(error.response.data, signupErr)
    })

有关某些其他信息,我的模型要求发送文件和JSON数据。

2 个答案:

答案 0 :(得分:0)

您的第二个then在错误的位置。还定义了formData吗?

axios.post('/account/signup', userObj).then((profile)=>{
    //data returns current user info, including if they are verified or not
    return axios.post('/account/signup/veteranFile-upload', formData).then(()=>{
        //window.location.replace('/')
        console.log('Hello?')
    }).catch( function (error){        
        showAppropriateTextSignUp(error.response.data, signupErr)
   });
});

一种更简洁的方法:使用async await:

const api = async() => {
  try{
    const profile = await axios.post('/account/signup', userObj);
    const whatever = axios.post('/account/signup/veteranFile-upload', formData);
    console.log(whatever)
  } catch (e) {
    showAppropriateTextSignUp(error.response.data, signupErr)
  }
}

答案 1 :(得分:0)

您可能需要链接axios调用而不是返回。那是

    axios.post('/account/signup', userObj)
          .then((profile)=>{
            //current user info, including if they are verified or not
            axios.post('/account/signup/veteranFile-upload', formData).then(resp=>{
                     //do something with the response
                    //window.location.replace('/')
           }).catch(err=>{
                   console.log(err)
           })
            console.log('Hello?')
        }).catch( function (error){
            showAppropriateTextSignUp(error.response.data, signupErr)
        })