简体   繁体   中英

Promise which inludes another async await promise - how to resolve?

I need to make two post requests in succession. There is an async "post form" function which starts the request with the "await" keyword and the result is handled in the "then" block.

I try to do this post request by awaiting a promise, wherein I call the above mentioned async function. The problem is that it doesn't seem that the promise can be resolved inside the functions "then" block.

I have some example code to show the issue (look at start() function where it starts). See fiddle

//Returns a promise. It contains another async-await promise
function mainFunction() {

  return new Promise( () => {           //<-- this never resolves

       async function postForm(){

          //(Post a form)
         await new Promise( (resolve, reject) => {
              setTimeout(() => {
                resolve('resolved');
              }, 2000);

          }).then( response => {    // <-- how to resolve the first promise inside here?

               console.log('promise 2 response: ',response) 

               //Try to resolve the 1st promise (doesn't work)
               new Promise( (resolve,reject) => resolve('promise 1 resolved') );

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

  })

}

//Make two posts in succession
async function start(){ 

  //Post 1 - (never resolves)
  await mainFunction().then( response => {

        //(Next: make post request 2)

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

start();

How can I resolve the first promise, or isn't it possible? Is there some other solution? The idea is to make another post request when the first one is resolved.

If you use promises then you work with .then() and .catch() if you work with async/ await then you dont use .then() and .catch() because async / await is syntatic sugar so that we dont need to nest our responses over and over.

If you want to make 2 post request for example with axios or fetch then you can simply use async / await because they return an promise.

async function requests(){
   //await makes the request wait till it gets some response
   const response1 = await axios.post("url", {data});
   const response2 = await axios.post("url2", {data});

}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM