Как записать в глобал переменную результат асинхронного кода?
Консольлоги сделанные внутри функции показывают наполненный массив. Консольлоги сделанные снаружи функции показывают пустые массивы. Оператор await как раз ждёт пока метод .map() вернёт результат и тогда записывает его в глобал переменную dataLength. Как мне наполнить этот массив? Как я могу ретурнить результат?
const fetch = require("node-fetch");
let mainData = [];
let dataLength = [];
(async () => {
const response = await fetch('https://jsonplaceholder.typicode.com/users');
const json = await response.json();
mainData = json;
dataLength = await mainData.map(item => item.name.length);
console.log(dataLength);
console.log(mainData);
// mainData.forEach(function (item, index, array) {
// dataLength = item.name.length;
// console.log(dataLength)
// });
})();
console.log(dataLength);
console.log(mainData);
Ответы (1 шт):
То, что вы запустили async функцию сразу после создания, не значит, что ваш текущий контекст стал асинхронным.
Результатом вашей самовызывающейся функции будет Promise, который когда-то будет разрезолвлен. В то время как логи вы запускаете синхронно в рамках этой же таски. Хотите провернуть ваш трюк, логируйте в .then. Если хотите сохранить результат глобально - пожалуйста. Но если хотите работать с этим результатом, это надо делать только после резолва.
const fetch = require("node-fetch");
let mainData = [];
let dataLength = [];
async function main() {
const response = await fetch('https://jsonplaceholder.typicode.com/users');
mainData = await response.json();
dataLength = mainData.map(item => item.name.length);
mainData.forEach(function (item, index, array) {
dataLength = item.name.length;
console.log(dataLength)
});
}
main().then(...); // любая дальшейшая работа с данными