Сделайте несколько почтовых запросов в Axios, а затем получите весь ответ, чтобы сделать еще один запрос

Я уже сделал 2 запроса .., но я хочу сделать запрос на исправление, используя идентификатор из каждого ответа ...

другой будет помещен в первый, а второй будет в данных

мы можем передать его в var? не понимаю, как это сделать ..

для справки я использую gatsbyjs, и я использую directusCMS

let url3 = `${process.env.GATSBY_DIRECTUS_API_URL}/gemaclc/items/pendaftar/:id (the id should be from the first response that we just made)?access_token=${process.env.GATSBY_DIRECTUS_TOKEN}`;

axios.patch(url3, data, {
    
    data: JSON.stringify(
    {
        featured_image: 1 (id of the second response whcih is an image),
        
    
    }), 
})

event.preventDefault();

const data = new FormData() 
data.append('file', this.state.selectedFile)
console.warn(this.state.selectedFile);
console.log(data);

// console.log("User Email :"  + this.state.email)
// console.log("User nama :"  + this.state.name)
// console.log("User telepon :"  + this.state.telepon)
// console.log("User program :"  + JSON.stringify([this.state.program]))
// console.log("User tanggal :"  + this.state.tanggal_lahir)
// console.log("User tempat :"  + this.state.tempat_lahir)

let url = `${process.env.GATSBY_DIRECTUS_API_URL}/gemaclc/items/pendaftar?access_token=${process.env.GATSBY_DIRECTUS_TOKEN}`;

let url2 = `${process.env.GATSBY_DIRECTUS_API_URL}/gemaclc/files?access_token=${process.env.GATSBY_DIRECTUS_TOKEN}`;


let url2 = `${process.env.GATSBY_DIRECTUS_API_URL}/gemaclc/files?access_token=${process.env.GATSBY_DIRECTUS_TOKEN}`;

axios(url, {
    method: 'POST',
    headers: {
      'Accept': 'application/json',
      'Content-Type': 'application/json',
    },
    data: JSON.stringify({
      status:"published",
      nama: this.state.name,
      // email: this.state.email,
      // telepon: this.state.telepon,
      // program: [1],
      // tanggal_lahir: this.state.tanggal_lahir,
      // tempat_lahir: this.state.tempat_lahir,
    })
})
.then(res => {
  console.log(res)
  return axios.post(url2, data, {
    
    data: JSON.stringify(
    {
        data: data,
        
    
    }), 
})
})
.then(res => {
  console.log(res.data.data.id) 
  return axios.patch( url3, {

  })
})
.catch(error => {
    console.log(error)
});

person iryanrachman    schedule 25.06.2020    source источник


Ответы (1)


Я сделал очень упрощенный пример того, что вы пытаетесь выполнить, используя синтаксис async / await, поскольку .then () было бы сложнее читать; в основном вы можете сохранить результат каждого почтового запроса в переменной для использования в вашем запросе на исправление. Я не уверен, как выглядит ваш объект ответа, поэтому вам может потребоваться дополнительное извлечение свойств.

//simulates 1st post request
const post1= new Promise((resolve, reject) => {
    setTimeout(() => resolve(1), 1000)
});

//simulates 2nd post request
const post2= new Promise((resolve, reject) => {
    setTimeout(() => resolve(2), 1000)
});

const groupedRequests = async() => {

    //represents calling your 1st post request;
    let id1 = await post1; 
    //represents calling your 2nd post request
    let id2 = await post2; 
  
    //represents your patch request
    console.log(id1, id2)
}
  
groupedRequests();

Изменить: я пошел дальше и сделал версию .then (), чтобы вы могли видеть сравнение.

//simulates 1st post request
const post1= new Promise((resolve, reject) => {
    setTimeout(() => resolve(1), 1000)
});

//simulates 2nd post request
const post2= new Promise((resolve, reject) => {
    setTimeout(() => resolve(2), 1000)
});

//stores first result
let id1; 

//represents callings 1st post request
post1
.then(result => {
    id1 = result;
    //represents calling 2nd post request
    return post2;
}).then(result => {
    let id2 = result; 
    //represents your patch request
    console.log(id1, id2)
})
person Pavlos Karalis    schedule 25.06.2020