сделать вызов API для каждого элемента массива - PullRequest
0 голосов
/ 28 мая 2019

У меня есть массив объектов дней, я хочу сделать отдельный HTTP-вызов для каждого элемента массива.но условие состоит в том, что, когда я получаю ответ об успешном использовании предыдущих элементов, тогда я хочу сделать следующий запрос API элементов, пока не захочу подождать.Предположим, у меня есть 5 элементов в моем массиве, поэтому он немедленно вызовет API.Я хочу, чтобы каждый элемент API запрашивал последовательно.означает, что когда мой ответ на запросы API первых элементов имеет значение true, тогда API второго элемента должен вызываться.

Я использовал for и для каждого цикла и перебираю каждый элемент массива и выполняю HTTP-пост-вызов, но он не ждет ответа об успешном выполнении предыдущих запросов.

// component call

daysArr = [
    {
      day: 'Monday',
      date: '20-10-2018'
    },
    {
      day: 'Tuesday',
      date: '21-10-2018'
    },
    {
      day: 'Wednesday',
      date: '22-10-2018'
    },
    {
      day: 'Thursday',
      date: '23-10-2018'
    },
    {
      day: 'Friday',
      date: '24-10-2018'
    },
    {
      day: 'Saturday',
      date: '25-10-2018'
    },
    {
      day: 'Sunday',
      date: '26-10-2018'
    }
  ]
  
  postCall() {
  let apiUrl = 'https:someurl.com/api/dayspost';
  for (let i = 0; i < this.daysArr.length; i++) {
  
      // how to check previous request response & make request for next array element
      
    this.service.createPost(apiUrl,this.daysArr[i])
    .subscribe(response => {
      console.log('response',response)
    })
  }
}

//service post call

createPost(url, post) {
   return this.http.post(url,post)
    .pipe(
      map(data => {
        return data;
      })
     )
 }

выше - фрагмент кода, отображающий запрос API.но я не понимаю, как я могу проверить свой предыдущий ответ, а затем только сделать новый API / post-вызов для нового элемента массива.

Спасибо.

1 Ответ

0 голосов
/ 28 мая 2019

Вы можете сделать что-то вроде этого:

let i = 0;
makeRequest(apiUrl, this.daysArr[i]){
  this.service.createPost(apiUrl,post)
    .subscribe(response => {
       console.log('response',response)
       i++;
       if(i < this.days.length){
          makeRequest(apiUrl, this.daysArr[i])
       }
  })
}

У меня сейчас нет IDE, чтобы попробовать это, но оно должно работать нормально

...