Как я могу сделать несколько запросов подряд, используя riot-lol-api? - PullRequest
0 голосов
/ 05 ноября 2018

СИТУАЦИЯ:

У меня была существующая кодовая база, которая использовала другую библиотеку для отправки запросов в Riot API. К сожалению, в указанной библиотеке были некоторые проблемы, поэтому я решил перейти на эту:

https://www.npmjs.com/package/riot-lol-api

https://github.com/Neamar/riot-lol-api/blob/master/lib/index.js

Единственная проблема: эта библиотека, кажется, не использует Promises, в то время как старая использовала, и мне трудно адаптировать мой код к этой новой библиотеке.


КОД:

var urls = [];

    for (var i = 0; i < enemies.length; i++) {
         urls.push('/lol/league/v3/positions/by-summoner/'+enemies[i].summonerId);
    }

    let promises = urls.map(url => fetchData(url, region, "league"));

    Promise.all(promises).then(responses => {

         console.log("RESPONSES: "+responses);

...

function fetchData(url, region, tag) {

// This used to be a promise when the old library was used

riotRequest.request(region.toLowerCase(), tag, url, function(err, data) {
    if (!err) {
        return data;
    } else {
        console.error("ERROR FIRST ITERATIONS: "+err);
        res.render("threat", {errorMessage: "Player not found ! The game must either have started or be on the loading screen.", finalPlayers: undefined});
    }
});

}

Теперь, конечно, это не работает, но рассмотрите псевдокод, чтобы объяснить, чего я хотел бы достичь здесь.


ВЫВОД:

RESPONSES: ,,,,

ВОПРОС:

Как мне адаптировать мой код к новой библиотеке?

1 Ответ

0 голосов
/ 05 ноября 2018

Когда я писал библиотеку, обещания были очень медленными. Использование обещаний позволило мне отправлять 700 запросов в секунду на процессор, без обещаний я получал 1000 запросов в секунду на процессор.

Если производительность не является проблемой в вашем случае, вы можете преобразовать функции стиля обратного вызова в обещания, используя эту маленькую оболочку:

let RiotRequest = require('riot-lol-api');

let riotRequest = new RiotRequest('<your-key>');

// This function will return a promise that you can then use with Promise.all
function promisifiedRequest(region, group, endpoint) {
  return new Promise((resolve, reject) => {
    riotRequest.request(region, group, endpoint, function(err, res) {
      if(err) {
        reject(err)
      }
      else {
        resolve(res);
      }
    })
  });
}

// Example use:
promisifiedRequest('euw1', 'summoner', '/lol/summoner/v3/summoners/by-name/graphistos').then(function(response) {
  console.log("Result:", response);
}).catch(console.log)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...