Получать данные в порядке массива - PullRequest
0 голосов
/ 20 октября 2019

У меня есть массив, который содержит список идентификаторов. С его помощью я пытаюсь получить некоторые данные постов из WordPress REST API. Мне удалось получить данные, которые я искал, но проблема, с которой я столкнулся, заключается в том, что объекты внутри массива, сгенерированные функцией map, не находятся в том же порядке, что и идентификаторы в исходном массиве.

fetchData = async () => {
    const array = [];
    await Promise.all( ids.map( async id => {
        await apiFetch( {
            path: `/wp/v2/posts/${ id }`,
        } ).then( response => array.push( response ) );
    } ) );
    console.log( array );
};

Как я могу убедиться, что извлеченные данные извлекаются и хранятся в том же порядке, что и исходный массив?

1 Ответ

0 голосов
/ 20 октября 2019

Вы делаете асинхронные вызовы, поэтому ответы не будут выбираться по порядку.

Вместо массива вы можете использовать Map с id в качестве ключа и responseкак значение.

fetchData = async () => {
    const map = new Map();
    await Promise.all( ids.map( async id => {
        await apiFetch( {
            path: `/wp/v2/posts/${ id }`,
        } ).then( response => map.set(id, response) );
    } ) );

    // Display responses in 'ids' array order.
    ids.forEach(id => {
      console.log(map.get(id));
    });
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...