Сообщение от ksa
|
Например вот так
(async _ => {
const val = await test()
alert(val)
})()
function test() {
return new Promise((resolve) => {
setTimeout(_ => resolve('ok'), 2000)
})
}
Почему многие так стараются "притянуть" асинхронные действия к виду синхронных?
В твоем примере ты и так получишь ответ от "промиса". Но тебе почему-то нужно это получить не в then, а именно после вызова промиса.
Возможно такое начинают творить не понимая как можно работать с асинхронными действиями?
Judgin, у тебя ведь получается целый массив таких промисов... Запросто можно применить промисное АПИ. Или цепочку промисов, если она требуется...
|
Проблема в том, что в скрипте ранее уже используются промисы, а в этом куске кода который я привел выше имеется цикл for и я не могу завершить данный цикл, так как в нем находится промис. А мне его нужно завершить, так как ниже расположенный код не должен находиться в данном цикле. Как решить данную проблему?
const secondPage = "page|279ca2067846c0060304271a0662e878f4f4011301eebfee0a|596563";
Promise.all([
fetch("https://ru.wikipedia.org/w/api.php?action=query&list=categorymembers&cmtitle=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%9A%D0%B8%D0%BD%D0%BE%D0%BA%D0%BE%D0%BC%D0%B5%D0%B4%D0%B8%D0%B8%20%D0%A1%D0%A1%D0%A1%D0%A0&cmlimit=500&format=json&prop=iwlinks&origin=*"),
fetch(`https://ru.wikipedia.org/w/api.php?action=query&list=categorymembers&cmtitle=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%9A%D0%B8%D0%BD%D0%BE%D0%BA%D0%BE%D0%BC%D0%B5%D0%B4%D0%B8%D0%B8%20%D0%A1%D0%A1%D0%A1%D0%A0&cmlimit=500&format=json&prop=iwlinks&origin=*&cmcontinue=${secondPage}`)
])
.then (function(responses){
return Promise.all(responses.map(function(response) {
return response.json();
}));
}) .then (function(data) {
let fObject = data[0].query.categorymembers;
let sObject = data[1].query.categorymembers;
let fullObject = fObject.concat(sObject);
arr = [];
for(j = 0; j < fullObject.length; j++) {
delete fullObject[j].pageid;
delete fullObject[j].ns;
}
//CONVERT STRUCTURE OF OBJECT
arr = fullObject.map(function(obj) {
return obj.title;
});
const groupNames = arr => {
const map = arr.reduce((acc, val) => {
let char = val.charAt(0).toUpperCase();
acc[char] = [].concat((acc[char] || []), val);
return acc;
}, {});
const res = Object.keys(map).map(el => ({
letter: el,
names: map[el]
}));
return res;
};
//EDIT ARRAY
arrEdited = groupNames(arr);
let namesArrEdited = arrEdited[12].names;
namesArrEdited.splice(41, 9);
namesArrEdited.push('Кыш и два портфеля');
arrEdited[0].names.push('4:0 в пользу Танечки');
arrEdited.splice(1, 1);
arrEdited.splice(19, 1);
arrEdited.splice(30, 1);
for(i = 0; i < arr.length; i++) {
fetch(`https://ru.wikipedia.org/w/api.php?action=query&prop=imageinfo&titles=${arr[i]}&format=json&iiprop=url&generator=images&origin=*`)
.then (function(response) {
return response.json();
})
.then (function(data) {
urlArr = [];
let imgObj = Object.values(data.query.pages);
let imgUrl = imgObj[0].imageinfo[0].url;
urlArr.push(imgUrl);
})
}
console.log(urlArr);
});