Выполнение параллельных HTTP-запросов в Meteor - PullRequest
0 голосов
/ 03 августа 2020

Допустим, у меня есть набор документов, которые нужно обновить с помощью внешнего API. На клиенте я получаю эти документы, а затем делегирую вызов API на сервере в методе Meteor

Ie

//on client
const docs = Docs.find().fetch();
for (let doc of docs) {
  //Delegate to Server to handle actual request to external API and updating to DB
  Meteor.call('updateFromExternalAPI', doc);
}

Я знаю, что это неэффективно, и я ' Я хотел бы выполнять эти запросы параллельно. Я использовал Promises.all() раньше и понимаю, что, вероятно, существует множество способов сделать это в стандартной JS и других средах. Но каков желаемый шаблон для подобных вещей в Meteor? Придется ли мне полагаться на другие пакеты npm?

Будем признательны за любые современные блоги, учебные пособия.

Спасибо!

1 Ответ

4 голосов
/ 04 августа 2020

Я хотел бы запускать эти запросы параллельно

Не видя вашего серверного кода, я думаю, единственное, чего не хватает, чтобы сделать код полностью параллельным, - это this.unblock() в начале метода updateFromExternalAPI. Это позволит немедленно вызвать следующий метод, вместо того, чтобы ждать возврата из предыдущего вызова метода.

какой желаемый шаблон для выполнения подобных действий в Meteor?

В идеале вы должны отредактировать updateFromExternalAPI (или создать аналогичный метод), чтобы взять все docs одновременно и выполнить саму итерацию.

Еще лучше, этот метод будет .fetch() данных вместо получения полной документации от клиента. В любом случае сервер уже должен иметь к ним доступ. При необходимости сервер может фильтровать на основе критериев, отправленных от клиента (например, список _id s).

Это помогает?

...