ÐеÑепиÑиÑе, иÑполÑзÑÑ async/await
Ðиже пÑÐ¸Ð¼ÐµÑ Ð¸Ð· Ñаздела ЦепоÑка пÑомиÑов, пеÑепиÑиÑе его, иÑполÑзÑÑ async/await вмеÑÑо .then/catch.
Ð ÑÑнкÑии demoGithubUser замениÑе ÑекÑÑÑÐ¸Ñ Ð½Ð° Ñикл: иÑполÑзÑÑ async/await, ÑделаÑÑ ÑÑо бÑÐ´ÐµÑ Ð¿ÑоÑÑо.
class HttpError extends Error {
constructor(response) {
super(`${response.status} for ${response.url}`);
this.name = 'HttpError';
this.response = response;
}
}
function loadJson(url) {
return fetch(url)
.then(response => {
if (response.status == 200) {
return response.json();
} else {
throw new HttpError(response);
}
})
}
// ÐапÑаÑиваÑÑ Ð»Ð¾Ð³Ð¸Ð½, пока github не веÑнÑÑ ÑÑÑеÑÑвÑÑÑего полÑзоваÑелÑ.
function demoGithubUser() {
let name = prompt("ÐведиÑе логин?", "iliakan");
return loadJson(`https://api.github.com/users/${name}`)
.then(user => {
alert(`Ðолное имÑ: ${user.name}.`);
return user;
})
.catch(err => {
if (err instanceof HttpError && err.response.status == 404) {
alert("Такого полÑзоваÑÐµÐ»Ñ Ð½Ðµ ÑÑÑеÑÑвÑеÑ, пожалÑйÑÑа, повÑоÑиÑе ввод.");
return demoGithubUser();
} else {
throw err;
}
});
}
demoGithubUser();
Ð ÑÑой задаÑе Ð½ÐµÑ Ð½Ð¸Ñего Ñложного. ÐÑжно замениÑÑ .catch на try...catch внÑÑÑи demoGithubUser и добавиÑÑ async/await, где необÑ
одимо:
class HttpError extends Error {
constructor(response) {
super(`${response.status} for ${response.url}`);
this.name = 'HttpError';
this.response = response;
}
}
async function loadJson(url) {
let response = await fetch(url);
if (response.status == 200) {
return response.json();
} else {
throw new HttpError(response);
}
}
// ÐапÑаÑиваÑÑ Ð»Ð¾Ð³Ð¸Ð½, пока github не веÑнÑÑ ÑÑÑеÑÑвÑÑÑего полÑзоваÑелÑ.
async function demoGithubUser() {
let user;
while(true) {
let name = prompt("ÐведиÑе логин?", "iliakan");
try {
user = await loadJson(`https://api.github.com/users/${name}`);
break; // оÑибок не бÑло, вÑÑ
одим из Ñикла
} catch(err) {
if (err instanceof HttpError && err.response.status == 404) {
// поÑле alert наÑнÑÑÑÑ Ð½Ð¾Ð²Ð°Ñ Ð¸ÑеÑаÑÐ¸Ñ Ñикла
alert("Такого полÑзоваÑÐµÐ»Ñ Ð½Ðµ ÑÑÑеÑÑвÑеÑ, пожалÑйÑÑа, повÑоÑиÑе ввод.");
} else {
// неизвеÑÑÐ½Ð°Ñ Ð¾Ñибка, пÑобÑаÑÑваем еÑ
throw err;
}
}
}
alert(`Ðолное имÑ: ${user.name}.`);
return user;
}
demoGithubUser();