Как запросить API в партии? - PullRequest
0 голосов
/ 07 мая 2019

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

Так что я бы хотел обработать это как пакет.

Клиент отправляет 10 элементов, дождитесь ответа сервера. Как только ответ вернется, обработайте его на стороне клиента, затем отправьте еще 10 элементов на сервер и так далее.

Как бы мне этого достичь? PromiseAll (или Уточнить цену) будет запускать запрос параллельно, но то, что я хочу, является последовательным, насколько я понимаю.

Это мой метод тестирования, и он не работает, так как я хотел бы вернуть наблюдаемое, когда все это будет сделано.

private test(data):Observable<any>{

    const saveFormInstanceURL = this._networkService.serverUrl + this.SAVE_FORM_INSTANCE_SUFFIX;

    let i = 0;

    return from([data,data,data,data,data]).pipe(
      concatMap(postBody => {
        i++;
        return this._networkService.post(saveFormInstanceURL,postBody)
      })
    ).subscribe(val => {
      console.log('concatMap:', val);
      if (i === 4){
          console.log('all finished');
          return of([]);
        }
    });
  }

1 Ответ

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

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

interval(100) 
    .pipe(
      take(this.yourArray.length),
      map(i => this.yourArray[i])
    )
    .subscribe(item => {
      console.log(item); // do your thing
    });

Это если для обработки 10 на 10 с 1интервал секунд (100 мс для каждого):

interval(100)
.pipe(
  take(this.yourArray.length),
  bufferCount(10)
)
.subscribe(itemArray=> {
  console.log(itemArray);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...