Как я могу получить много пользователей по API ?? с помощью асинхронного ожидания - PullRequest
0 голосов
/ 02 июля 2019

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

так например

let users=['tom','jenny','smith','Joe']

async function getUsers() { 
  let response = await fetch(`http://something.something?q=${users}`);
  let data = await response.json();
  return data;
}

getUsers().then(data =>console.log(data))

так что мой план - users [0], users [1], что-то вроде функции make, в которую я добавляю номер индекса через цикл.

и получите всех пользователей и выясните, кто получает наибольшую плату.

поэтому мой вопрос: как можно шаг за шагом извлекать пользователей?

Ответы [ 2 ]

1 голос
/ 02 июля 2019

Вы можете использовать уменьшение массива, чтобы получить пользователя, который меньше платил, и объединиться с Promise.all, используя async / await для получения всех пользовательских данных

'use strict';

/* mock data for testing purposes
const usersData = [{
  name: 'john doe',
  payed: 10,
}, {
  name: 'john doe01',
  payed: 5,
}, {
  name: 'john doe02',
  payed: 8,
}, {
  name: 'john doe03',
  payed: 20,
}, {
  name: 'john doe04',
  payed: 40,
}, {
  name: 'john doe05',
  payed: 37,
}];
*/

async function getUsers() {
  const usersResponse = await Promise.all(
    usersName.map(userName => fetch(`http://something.something?q=${userName}`))
  );

  return usersResponse.map(userResponse => userResponse.json());
}

async function init() {
  try {
    const usersName = [
      'tom',
      'jenny',
      'smith',
      'Joe',
    ];

    const usersData = await getUsers(usersName);

    const userWhoLessPayed = usersData.reduce((prevUser, currentUser) => {
      if (prevUser.payed > currentUser.payed) {
        return currentUser;
      }

      return prevUser;
    });
    console.log(userWhoLessPayed);
  } catch (e) {
    console.error(e);
  }
}

init();
0 голосов
/ 02 июля 2019

Может быть попробовать что-то подобное?Вам нужно использовать async?

По сути, стратегия такова:

  1. Вернуть всех пользователей.Если у конечной точки нет способа фильтрации (через параметры - в некотором смысле, где вы в настоящее время не можете определить наиболее высокооплачиваемого исполнителя)
  2. После возвращения возьмите этот список пользователей, возвращенных из конечной точки, и выполните фильтрацию.Ниже мы фильтруем возвращаемый массив объектов, ища наибольшее значение вымышленного ключа с именем «pay».
    $.when( getAllArtists() ).then(function (allArtistResults) {
        $.each(allArtistResults, function(key, value){
             // let's just pretend we get an array of objects back
             // you could just filter it here?
             // props on below: /2668094/nahozhdenie-maksimalnogo-znacheniya-atributa-v-massive-obektov
             Math.max.apply(Math, value.map(function(artists) { return artists.pay; }))
        }
    }
    function getAllArtists() {
        return $.ajax({
            url: 'your-endpoint-here',
            type: 'GET'
        });
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...