Ushbu ochiq manbali loyihani butun dunyo bo'ylab odamlar uchun taqdim etmoqchimiz.

Ushbu qo'llanmaning mazmuni sizning tilingizga tarjima qilishga yordam bering!

darsga qaytish

Qayta yozing "rethrow" async/await

Quyida Va'dalar zanjiri bobidagi “rethrow” misolini topishingiz mumkin. Uni .then/catch o’rniga async/await yordamida qayta yozing.

Va demoGithubUser dagi tsikl foydasiga rekursiyadan xalos bo’ling: async/await yordamida bajarish oson bo’ladi.

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 haqiqiy foydalanuvchini ismini qaytarguncha foydalanuvchi ismini so'rang function demoGithubUser() { let name = prompt("Ism kiriting", "iliakan"); return loadJson(`https://api.github.com/users/${name}`) .then((user) => { alert(`To'liq ism: ${user.name}.`); return user; }) .catch((err) => { if (err instanceof HttpError && err.response.status == 404) { alert("Bunday foydalanuvchi yo'q, iltimos qayta kiring."); return demoGithubUser(); } else { throw err; } }); } demoGithubUser();

Bu yerda hech qanday fokuslar yo’q. demoGithubUser ichida .catch ni try...catch bilan almashtiring va kerak bo’lganda async/await ni qo’shing:

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 haqiqiy foydalanuvchini qaytarguncha foydalanuvchi nomini so'rang async function demoGithubUser() { let user; while (true) { let name = prompt("Ism kiriting", "iliakan"); try { user = await loadJson(`https://api.github.com/users/${name}`); break; // xato yo'q, tsiklni tark etish } catch (err) { if (err instanceof HttpError && err.response.status == 404) { // alert-dan keyin tsikl davom etadi alert("Bunday foydalanuvchi yo'q, iltimos qayta kiring."); } else { // noma'lum xato, qaytarmoq throw err; } } } alert(`To'liq ism: ${user.name}.`); return user; } demoGithubUser();