Как сделать запрос api после выполнения предыдущего запроса api в ionic - PullRequest
0 голосов
/ 07 августа 2020

Я делаю 3 запроса api post к wordpress api: 2 запроса api post к wp-json / wp / v2 / media, поэтому загружайте изображения 1 post запрос api на wp-json / wp / v2 / posts для сохранения source_url (который был получен из двух предыдущих запросов api post) в новое сообщение, которое создается.

Последний api зависит от первых 2 вызовов api-запроса и не должен выполняться, пока эти 2 api не будут завершены поскольку мне нужны значения из их обратного вызова, которые будут использоваться в моем последнем вызове запроса api.

Моя текущая проблема заключается в том, что все мои вызовы запросов api выполняются одновременно, и поэтому значения мне нужны с первого 2 запроса вызова api не готовы, и они отображаются как пустые в моем последнем вызове запроса api.

submitStory() {

    this.beforeImageUpload = this.transfer.create();
    this.beforeImageUpload.upload(this.beforeImageURL, this.url + "wp-json/wp/v2/media", {
      headers: {
        "Authorization": "Basic xxxxxxx",
        "content-disposition": "attachment; filename=\'before-image.jpg\'"
      }
    })
    .then((data)=>{
      return JSON.parse(data.response);
    })
    .then((data) => {
      this.before_image = data.source_url;
    }, (err) => {
      console.log(err);
    })

    this.afterImageUpload = this.transfer.create();
    this.afterImageUpload.upload(this.afterImageURL, this.url + "wp-json/wp/v2/media", {
      headers: {
        "Authorization": "Basic xxxxxxxx",
        "content-disposition": "attachment; filename=\'after-image.jpg\'"
      }
    })
    .then((data)=>{
      return JSON.parse(data.response);
    })
    .then((data) => {
      this.after_image = data.source_url;
    }, (err) => {
      console.log(err);
    })

    let postData = {
      "title": capital_letter(this.firstname + " " + this.lastname + "'s Story"),
      "content": this.description,
      "before_image": this.before_image,
      "after_image": this.after_image
    }

    this.http.post(this.url + "wp-json/wp/v2/stories", postData, {
      headers: {
        "Authorization": "Basic xxxxxxx",
        "Accept": "application/json",
        "Content-Type": "application/json"
      }
    }).subscribe(data => {
      console.log(data);
    }, error => {
      console.log(error);
    });

    this.router.navigate([`stories`]);

  }

1 Ответ

0 голосов
/ 07 августа 2020

Вы можете вызвать запрос 2-го, когда 1-й будет завершен.

Например:

firstRequest(){
    this.http.post("url", firstReqData, {
      headers: {
        "Authorization": "Basic xxxxxxx",
        "Accept": "application/json",
        "Content-Type": "application/json"
      }
    }).subscribe(data => {
      console.log(data);
      this.secondRequest(pass, your, data, to, second); // call this function to call your second request when first get completed
    }, error => {
      console.log(error);
    });
 }


secondRequest(get, your, data, to, second){ // get data to send it in 2nd request
    this.http.post("url", secondReqData, {
      headers: {
        "Authorization": "Basic xxxxxxx",
        "Accept": "application/json",
        "Content-Type": "application/json"
      }
    }).subscribe(data => {
      console.log(data);
    }, error => {
      console.log(error);
    });
 }
...