0

Пытаюсь добавить словари с массив itemsElems:

const itemsElems = []
getTable().then(res => {
    res.map( function(elem) { 
        console.log("Elem:", elem);
        itemsElems.push(elem);
    } )
})
console.log("ItemsElems:", itemsElems);

Вот это выводится:

ItemsElems: []
Editor.jsx:19 Elem: {id: 1, idgovernor: 1, inforegion: "!InfoRegion!", idnews: 1}
Editor.jsx:19 Elem: {id: 2, idgovernor: 2, inforegion: "!InfoRegion!", idnews: 1}

Почему список пустой? И почему он вообще первым выводится, если его вывод стоит в конце?

Vlad
  • 143
  • 1
    js ассихронный ...вызвали getTable() и пошли дальше скрипт исполнять, а когда getTable() отработает тогда и встроенный код будет выполнен – Volodymyr Dec 20 '19 at 15:09
  • @Volodymyr, как это исправить? – Vlad Dec 20 '19 at 15:10
  • А ещё на надо так использовать map. – Qwertiy Dec 20 '19 at 15:21
  • @Qwertiy, а как добавить с помощью response элементы в массив? – Vlad Dec 20 '19 at 15:45

1 Answers1

1

Выводится первым, потому, что функция getTable() возвращает promise. Поэтому JS сначала выполняет код который стоит после него. Чтобы исправить, можно подождать ответа от промиса getTable() через await. То есть:

async function fillArray() {
    const itemsElems = [];    
    let res = await getTable();
    res.map(elem => { 
            console.log("Elem:", elem);
            itemsElems.push(elem);
    });
    console.log("ItemsElems:", itemsElems);
}
Vadym
  • 48
  • 5
  • @Volodymyr, как это исправить? – Vlad Dec 20 '19 at 15:10
  • 1
    await не будет работать без async функции – WVFFLIFE Dec 20 '19 at 15:14
  • @Vlad Отредактировал – Vadym Dec 20 '19 at 15:14
  • @WVFFLIFE, можете поподробнее пожалуйста. Если getTable не async то работать не будет? И как понять что async? – Vlad Dec 20 '19 at 15:16
  • 1
    @Vlad async, если при обьявлении функции есть идентификатор async – Vadym Dec 20 '19 at 15:17
  • 1
    @Vlad await же принимает любой асинхронный результат, но при условии что функция асинхронная – Vadym Dec 20 '19 at 15:18
  • 1
    @Vlad таким образом мы делаем асинхронный код, как будто он синхронный – Vadym Dec 20 '19 at 15:19