Как я могу задержать вызовы http на некоторое время? - PullRequest
0 голосов
/ 10 марта 2020

У меня есть следующая проблема, и я был бы признателен, если бы кто-то мог послать мне идею, я попробовал, но она не сработала. Рассмотрим код:

 while (this.fastaSample.length > 0) {
      this.datainputService
        .saveToMongoDB(this.fastaSample.slice(0, batch))
        .subscribe();
    }

Предполагается, что я решу проблему, из-за которой я не могу отправить свои данные за один HTTP-вызов, так как он слишком большой, я смог отправить 10% без проблем, более того. , это не работает! Поэтому я подумал, что мне следует отправить меньшие партии, и я проконсультировался здесь с некоторыми вопросами и ответами, и они помогли мне, но не решили проблему.

Я пытался использовать await, как и в ноде, но это не работает; он отправляет все http одновременно, было бы неплохо остановить / удержать код до завершения последнего http-вызова, это было бы хорошо! Любое предложение?

1 Ответ

1 голос
/ 10 марта 2020

Полагаю, вы могли бы сделать все это красиво и rx js, используя from и concatAll:

непроверенный код

// first create batches by chunking the array
const batches = Array.from(
  { length: Math.ceil(fastaSample.length / batch) },
  (v, i) => fastaSample.slice(i * batch, i * batch + batch)
)

// Second go over these chunks using `from` and `concatAll`:
from(batches).pipe(
  map((batch) => this.data.inputService.saveToMongoDB(batch)),
  concatAll()
).subscribe();

This будет делать звонки последовательно. Если возможно выполнять запросы одновременно, вы можете выполнить mergeAll().


Но, как прокомментировал @Mike, похоже, что проблема должна быть обработана в бэкэнде MongoDB и принять multipart запрос. Таким образом, вам не нужно разбивать содержимое на части

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...