ÛÚ© Ø±ÙØ´ خاص Ø¨Ø±Ø§Û Ú©Ø§Ø± با Promise ÙØ§ ب٠شÛÙÙ Ø±Ø§ØØªØªØ± ÙØ¬Ùد دارد ک٠ب٠آ٠âasync/awaitâ Ú¯ÙØªÙ Ù Û Ø´ÙØ¯. ÙÙÙ ÛØ¯Ù Ù Ø§Ø³ØªÙØ§Ø¯Ù از آ٠ب٠شک٠غاÙÙÚ¯ÛØ± Ú©ÙÙØ¯Ù Ø±Ø§ØØª است.
ØªÙØ§Ø¨Ø¹ Async
Ø¨ÛØ§ÛÛØ¯ با Ú©ÙÛØ¯ÙاÚÙ async Ø´Ø±ÙØ¹ Ú©ÙÛÙ
. اÛÙ Ú©ÙÛØ¯ÙاÚÙ ÙØ¨Ù از ÛÚ© تابع ÙØ±Ø§Ø± Ù
Û Ú¯ÛØ±Ø¯Ø Ù
اÙÙØ¯ Ø²ÛØ±:
async function f() {
return 1;
}
ÙØ¬Ùد Ú©ÙÙ Ù âasyncâ ÙØ¨Ù از ÛÚ© تابع ÛÚ© ٠عÙÛ Ø³Ø§Ø¯Ù Ù Û Ø¯ÙØ¯: تابع ÙÙ ÛØ´Ù ÛÚ© Promise Ø¨Ø±Ù Û Ú¯Ø±Ø¯Ø§ÙØ¯. Ø³Ø§ÛØ± Ù ÙØ§Ø¯Ûر Ø¨Ù ØµÙØ±Øª Ø®ÙØ¯Ú©Ø§Ø± با ÛÚ© Promise Ø§ÙØ¬Ø§Ù شد٠در بر Ú¯Ø±ÙØªÙ Ù Û Ø´ÙÙØ¯.
Ø¨Ø±Ø§Û ÙÙ
ÙÙÙØ اÛ٠تابع ÛÚ© Promise Ø§ÙØ¬Ø§Ù
شد٠با Ù
ÙØ¯Ø§Ø± 1 را برÙ
Û Ú¯Ø±Ø¯Ø§ÙØ¯Ø Ø¨ÛØ§ÛÛØ¯ اÙ
ØªØØ§Ù Ú©ÙÛÙ
:
async function f() {
return 1;
}
f().then(alert); // 1
⦠٠ا Ù ÛâØªÙØ§ÙÛÙ Ø¨Ù Ø·ÙØ± ٠ستÙÛÙ ÛÚ© Promise را برگرداÙÛÙ Ø Ú©Ù ÙÙ Ø§Ù Ø®ÙØ§Ùد Ø¨ÙØ¯:
async function f() {
return Promise.resolve(1);
}
f().then(alert); // 1
Ø¨ÙØ§Ø¨Ø±Ø§ÛÙØ async تضÙ
ÛÙ Ù
Û Ú©ÙØ¯ ک٠تابع ÛÚ© Promise برÙ
Û Ú¯Ø±Ø¯Ø§ÙØ¯ Ù ÙØ³Ù
ت ÙØ§Û ØºÛØ± Promise آ٠را در بر Ù
Û Ú¯ÛØ±Ø¯. Ø³Ø§Ø¯Ù Ø§Ø³ØªØ ÙÙØ اÙ
ا ÙÙØ· اÛÙ ÙÛØ³Øª. Ú©ÙÛØ¯ÙاÚ٠دÛÚ¯Ø±Û Ø¨Ù Ø§Ø³Ù
await ÙØ¬Ùد دارد Ú©Ù ÙÙØ· Ø¯Ø§Ø®Ù ØªÙØ§Ø¨Ø¹ async کار Ù
Û Ú©ÙØ¯.
Await
Ø¨Ù Ø´Ú©Ù Ø²ÛØ± Ø§Ø³ØªÙØ§Ø¯Ù Ù Û Ø´ÙØ¯:
// تÙÙØ§ در ØªÙØ§Ø¨Ø¹ async کار Ù
Û Ú©ÙØ¯
let value = await promise;
Ú©ÙÛØ¯ÙاÚÙ await باعث Ù
Û Ø´ÙØ¯ Ú©Ù Ø¬Ø§ÙØ§Ø§Ø³Ú©Ø±Ûپت تا اجرا شد٠آ٠Promise صبر Ú©ÙØ¯ Ù Ù
ÙØ¯Ø§Ø± آ٠را Ø¨Ø±Ú¯Ø±Ø¯Ø§ÙØ¯.
در اÛÙØ¬Ø§ ٠ثاÙÛ Ø§Ø² ÛÚ© Promise دارÛ٠ک٠در ٠دت Û± ثاÙÛ٠با Ù ÙÙÙÛØª اجرا Ù Û Ø´ÙØ¯:
async function f() {
let promise = new Promise((resolve, reject) => {
setTimeout(() => resolve("done!"), 1000)
});
let result = await promise; // صبر Ù
Û Ú©ÙØ¯ تا پراÙ
ÛØ³ با Ù
ÙÙÙÛØª اجرا Ø´ÙØ¯ (*)
alert(result); // "done!"
}
f();
Ø§Ø¬Ø±Ø§Û ØªØ§Ø¨Ø¹ در خط (*) Ù
تÙÙÙ Ù
Û Ø´ÙØ¯ ٠زÙ
اÙÛ Ú©Ù Promise اجرا شد اداÙ
Ù Ù
Û ÛØ§Ø¨Ø¯Ø Ø¨Ù ØµÙØ±ØªÛ Ú©Ù âresult ÙØªÛج٠آ٠Ù
Û Ø´ÙØ¯. Ø¨ÙØ§Ø¨Ø±Ø§ÛÙ ÙØ·Ø¹Ù کد Ø¨Ø§ÙØ§ Ù
ÙØ¯Ø§Ø± â!doneâ Ø±Ø§ Ø·Û ÛÚ© ثاÙÛÙ ÙÙ
Ø§ÛØ´ Ù
Û Ø¯ÙØ¯.
ØªØ§Ú©ÛØ¯ Ù
Û Ú©ÙÛÙ
: await در ÙØ§Ùع Ø§Ø¬Ø±Ø§Û ØªØ§Ø¨Ø¹ را تا زÙ
ا٠ب٠اتÙ
اÙ
Ø±Ø³ÛØ¯Ù Ø§Ø¬Ø±Ø§Û Promise ب٠تعÙÛ٠در Ù
Û Ø¢ÙØ±Ø¯ ٠در اداÙ
٠با ÙØªÛØ¬Ù Ø¢Ù Ø§Ø¬Ø±Ø§Û ØªØ§Ø¨Ø¹ اداÙ
Ù Ù
Û ÛØ§Ø¨Ø¯. اÛÙ Ø§ØªÙØ§Ù ÙØ²ÛÙÙ Ø§Û Ø¨Ø±Ø§Û Ù
ÙØ§Ø¨Ø¹ Ù¾Ø±Ø¯Ø§Ø²Ø´Û ÙØ¯Ø§Ø±Ø¯Ø Ø²ÛØ±Ø§ Ù
ÙØªÙر Ø¬Ø§ÙØ§Ø§Ø³Ú©Ø±Ûپت Ù
Û ØªÙØ§Ùد Ø¨Ù Ø·ÙØ± ÙÙ
زÙ
Ø§Ù Ú©Ø§Ø±ÙØ§Û دÛÚ¯Ø±Û Ù
اÙÙØ¯ Ø§Ø¬Ø±Ø§Û Ø§Ø³Ú©Ø±Ûپت ÙØ§Û دÛÚ¯Ø±Ø Ù
Ø¯ÛØ±Ûت Ø³Ø§ÛØ± Ø§ØªÙØ§Ùات Ù ØºÛØ±Ù را Ø§ÙØ¬Ø§Ù
Ø¯ÙØ¯.
اÛÙ Ø±ÙØ´ Ø±ÙØ´ Ø²ÛØ¨Ø§ØªØ±Û Ø¨Ø±Ø§Û Ú¯Ø±ÙØªÙ ÙØªÛج٠Promise ÙØ³Ø¨Øª ب٠promise.then است Ù Ø®ÙØ§Ùد٠٠ÙÙØ´ØªÙ Ø¢Ù ÙÛØ² Ø±Ø§ØØª تر است.
await در تابع Ø¹Ø§Ø¯Û Ø§Ø³ØªÙØ§Ø¯Ù کرداگر ØªÙØ§Ø´ Ú©ÙÛÙ
تا از await در ÛÚ© تابع ØºÛØ± async Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ
Ø Ø®Ø·Ø§Û syntax Ø§Û ÙØ¬Ùد Ø®ÙØ§Ùد داشت:
function f() {
let promise = Promise.resolve(1);
let result = await promise; // Syntax error
}
اگر ÙØ±Ø§Ù
ÙØ´ Ú©ÙÛÙ
Ú©Ù async را ÙØ¨Ù از تابع ÙØ±Ø§Ø± دÙÛÙ
اÛ٠خطا را Ù
Û Ú¯ÛØ±ÛÙ
. ÙÙ
Ø§ÙØ·Ùر Ú©Ù ÙØ¨Ùا ÙÙ
Ú¯ÙØªÙ Ø´Ø¯Ø await ÙÙØ· در تابع async کار Ù
Û Ú©ÙØ¯.
Ø¨ÛØ§ÛÛØ¯ Ù
ثا٠showAvatar() از بخش Ø²ÙØ¬ÛرÙâØ§Û Ú©Ø±Ø¯Ù Promise را با Ø§Ø³ØªÙØ§Ø¯Ù از async/await Ù
جدد بÙÙÛØ³ÛÙ
:
Û±. Ù
ا ÙÛØ§Ø² دارÛÙ
Ú©Ù ÙØ±Ø§Ø®ÙاÙÛ ÙØ§Û then. را با await جاÛگزÛÙ Ú©ÙÛÙ
.
Û². ÙÙ
ÚÙÛÙ Ø¨Ø§ÛØ¯ تابع را async Ú©ÙÛÙ
تا Ø¢ÙÙØ§ کار Ú©ÙÙØ¯.
async function showAvatar() {
// read our JSON
let response = await fetch('/article/promise-chaining/user.json');
let user = await response.json();
// read github user
let githubResponse = await fetch(`https://api.github.com/users/${user.name}`);
let githubUser = await githubResponse.json();
// show the avatar
let img = document.createElement('img');
img.src = githubUser.avatar_url;
img.className = "promise-avatar-example";
document.body.append(img);
// wait 3 seconds
await new Promise((resolve, reject) => setTimeout(resolve, 3000));
img.remove();
return githubUser;
}
showAvatar();
Ø¨Ø³ÛØ§Ø± ØªÙ ÛØ² Ù Ø¢Ø³Ø§Ù Ø¨Ø±Ø§Û Ø®ÙØ§ÙØ¯ÙØ Ø¯Ø±Ø³ØªÙØ Ø®ÛÙÛ Ø¨ÙØªØ± از ÙØ¨Ù شد.
await در Ø³Ø·ÙØ Ø¨Ø§ÙØ§ ÛÚ© Ù
اÚÙ٠را Ù
Û Ø¯ÙÙØ¯.در Ù
Ø±ÙØ±Ú¯Ø± ÙØ§Û Ù¾ÛØ´Ø±ÙØªÙØ await زÙ
اÙÛ Ú©Ù Ø¯Ø§Ø®Ù ÛÚ© Ù
اÚÙÙ ÙØ³ØªÛÙ
Ø Ø¨Ù Ø®ÙØ¨Û در Ø³Ø·ÙØ Ø¨Ø§ÙØ§ کار Ù
Û Ú©ÙØ¯. Ù
ا Ù
اÚÙÙ ÙØ§ را در Ù
ÙØ§ÙÙ Ù
اÚÙÙ ÙØ§Ø Ù
عرÙÛ Ù¾ÙØ´Ø´ Ø®ÙØ§ÙÛÙ
دادâ¦
Ø¨Ø±Ø§Û Ù Ø«Ø§Ù:
// Ù
ا ÙØ±Ø¶ Ù
Û Ú©ÙÛÙ
ک٠اÛ٠کد در Ø³Ø·Ø Ø¨Ø§ÙØ§ در داخ٠ÛÚ© Ù
اÚÙ٠اجرا Ù
Û Ø´ÙØ¯
let response = await fetch('/article/promise-chaining/user.json');
let user = await response.json();
console.log(user);
اگر ٠ا از ٠اÚÙÙ ÛØ§ Ù Ø±ÙØ±Ú¯Ø± ÙØ§Û ÙØ¯ÛÙ Û Ú©Ù Ø§ÛÙ ÙÛÚÚ¯Û Ø±Ø§ Ù¾Ø´ØªÛØ¨Ø§ÙÛ Ú©ÙÙØ¯ Ø§Ø³ØªÙØ§Ø¯Ù ÙÚ©ÙÛÙ Ø ÛÚ© راÙکار Ú©ÙÛ ÙØ¬Ùد دارد: Ø¯Ø±Ø¨Ø±Ú¯Ø±ÙØªÙ در ÛÚ© تابع بدÙÙ ÙØ§Ù async.
٠اÙÙØ¯ Ø²ÛØ±:
(async () => {
let response = await fetch('/article/promise-chaining/user.json');
let user = await response.json();
...
})();
awaitØ âthenablesâ Ù
Û Ù¾Ø°ÛØ±Ø¯Ù
اÙÙØ¯ promise.thenØ await ب٠Ù
ا اÛ٠اÙ
کا٠را Ù
Û Ø¯ÙØ¯ تا از thenable objects Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ
(Ø¢ÙÙØ§ÛÛ Ø¨Ø§ Ù
تد ÙØ§Ø¨Ù ÙØ±Ø§Ø®ÙاÙÛ then). Ø§ÛØ¯Ù اÛ٠است Ú©Ù object Ø«Ø§ÙØ« Ù
Ù
ک٠است promise ÙØ¨Ø§Ø´Ø¯ اÙ
ا ÙØ§Ø¨Ù Ø§ÙØ·Ø¨Ø§Ù با promise باشد: اگر از then. Ù¾Ø´ØªÛØ¨Ø§ÙÛ Ú©ÙØ¯Ø اÛÙ Ù
ÙØ±Ø¯ Ø¨Ø±Ø§Û Ø¨Ø§ await Ø§Ø³ØªÙØ§Ø¯Ù شد٠کاÙÛØ³Øª.
اÛÙØ¬Ø§ Ù¾ÛØ´ ÙÙ
Ø§ÛØ´Û از ÛÚ© Ú©ÙØ§Ø³ Thenable Ù
Û Ø¨ÛÙÛÙ
Ú©Ù await ÙÙ
ÙÙÙ Ø§Û Ø§Ø² آ٠را Ù¾Ø°ÛØ±Ùت٠است:
class Thenable {
constructor(num) {
this.num = num;
}
then(resolve, reject) {
alert(resolve);
// بعد از Û±Û°Û°Û° Ù
ÛÙÛ Ø«Ø§ÙÛ٠با Ù
ÙØ¯Ø§Ø± this.num * 2 ØÙ Ù
Û Ø´ÙØ¯
setTimeout(() => resolve(this.num * 2), 1000); // (*)
}
}
async function f() {
// Ø¨Ø±Ø§Û Û± ثاÙÛ٠صبر Ù
Û Ú©ÙØ¯ ٠سپس result Ù
ÙØ¯Ø§Ø± Û² را Ù
Û Ú¯ÛØ±Ø¯
let result = await new Thenable(1);
alert(result);
}
f();
اگر await Ø´ÛØ¡ ØºÛØ± Promise Ø§Û Ú©Ù Ø¯Ø§Ø±Ø§Û then. است را Ø¯Ø±ÛØ§Ùت Ú©ÙØ¯Ø Ø¢Ù Ù
تد را Ø¨Ù Ø·ÙØ±Û ÙØ±Ø§Ø®ÙاÙÛ Ù
Û Ú©ÙØ¯ Ú©Ù ØªÙØ§Ø¨Ø¹ resolve Ù reject ب٠عÙÙØ§Ù پاراÙ
تر ب٠آ٠Ù
تد ÙÙگاÙ
ÙØ±Ø§Ø®ÙاÙÛ Ø¯Ø§Ø¯Ù Ø´Ø¯Ù Ø§Ø³Øª (ÙÙ
Ø§ÙØ·Ùر Ú©Ù Ø¨Ø±Ø§Û ÛÚ© اجرا Ø´ÙÙØ¯Ù Promise Ù
عÙ
ÙÙÛ Ø§Û٠کار را Ø§ÙØ¬Ø§Ù
Ù
Û Ø¯ÙØ¯). سپس await صبر Ù
Û Ú©ÙØ¯ تا ÛÚ©Û Ø§Ø² Ø¢Ù Ø¯Ù ÙØ±Ø§Ø®ÙاÙÛ Ø´ÙØ¯ (در Ù
Ø«Ø§Ù Ø¨Ø§ÙØ§Ø اÛÙ Ø§ØªÙØ§Ù در خط (*) رخ Ù
Û Ø¯ÙØ¯) ٠با Ù
ÙØ¯Ø§Ø± result ب٠کار Ø®ÙØ¯ اداÙ
Ù Ù
Û Ø¯ÙØ¯.
Ø¨Ø±Ø§Û ØªØ¹Ø±ÛÙ ÛÚ© Ù
تد async در Ú©ÙØ§Ø³Ø کاÙÛØ³Øª آ٠را async ÙÛØ¯ Ú©ÙÛØ¯:
class Waiter {
async wait() {
return await Promise.resolve(1);
}
}
new Waiter()
.wait()
.then(alert); // 1 (اÛÙ ØØ§Ùت ÙÙ
اÙÙØ¯ ØØ§Ùت ر٠ب٠ر٠است (result => alert(result)))
Ù
ÙØ¸Ùر ÛÚ©Û Ø§Ø³Øª: اÛÙ Ø±ÙØ´ تضÙ
ÛÙ Ù
Û Ú©ÙØ¯ Ú©Ù Ù
ÙØ¯Ø§Ø± Ø¨Ø§Ø²Ú¯Ø´ØªÛ ÛÚ© Promise است Ù Ø§Ø³ØªÙØ§Ø¯Ù از await را اÙ
Ú©Ø§Ù Ù¾Ø°ÛØ± Ù
Û Ú©ÙØ¯.
Ù Ø¯ÛØ±Ûت خطا
اگر ÛÚ© Promise Ø¨Ù ØµÙØ±Øª Ø¹Ø§Ø¯Û Ø§Ø¬Ø±Ø§ Ø´ÙØ¯Ø پس از Ø¢Ù await promise ÙØªÛج٠را برÙ
Û Ú¯Ø±Ø¯Ø§ÙØ¯. اÙ
ا در ØµÙØ±Øª رد Ø´Ø¯ÙØ باعث Ø¨Ø±ÙØ² خطا Ù
Û Ø´ÙØ¯ ÙÙ
اÙÙØ¯ ØØ§ÙØªÛ Ú©Ù Ø¯Ø± آ٠خط عبارت throw ÙØ¬Ùد داشت٠است.
اÛ٠کد:
async function f() {
await Promise.reject(new Error("Whoops!"));
}
⦠Ù٠اÙÙØ¯ کد Ø²ÛØ± است:
async function f() {
throw new Error("Whoops!");
}
در Ø´Ø±Ø§ÛØ· ÙØ§ÙØ¹ÛØ Ù
Ù
ک٠است Promise Ù
Ø¯ØªÛ Ø·Ù٠بکشد تا ب٠خطا Ø¨Ø®ÙØ±Ø¯. در اÛÙ ØØ§Ùت ÙØ¨Ù از اÛÙÚ©Ù await Ø¨Ù Ø¨Ø±ÙØ² خطا Ù
ÙØ¬Ø± Ø´ÙØ¯Ø ØªØ§Ø®ÛØ±Û ÙØ¬Ùد دارد.
Ù
ا Ù
Û ØªÙØ§ÙÛÙ
آ٠خطا Ø±Ø§Ø Ù
اÙÙØ¯ ÛÚ© throw Ø¹Ø§Ø¯ÛØ با Ø§Ø³ØªÙØ§Ø¯Ù از try..catch Ø¨Ú¯ÛØ±ÛÙ
:
async function f() {
try {
let response = await fetch('http://no-such-url');
} catch(err) {
alert(err); // TypeError: failed to fetch
}
}
f();
در Ø´Ø±Ø§ÛØ· Ø¨Ø±ÙØ² Ø®Ø·Ø§Ø ÙØ³Ù
ت Ú©ÙØªØ±Ù ÙØ§Ø±Ø¯ بÙÙÚ© catch Ù
Û Ø´ÙØ¯. Ù
ا ÙÙ
ÚÙÛÙ Ù
Û ØªÙØ§ÙÛÙ
ÚÙØ¯Û٠خط را در بر Ø¨Ú¯ÛØ±ÛÙ
:
async function f() {
try {
let response = await fetch('/no-user-here');
let user = await response.json();
} catch(err) {
// Ø®Ø·Ø§ÙØ§ ÙÙ
از fetch Ù ÙÙ
از response.json() Ú¯Ø±ÙØªÙ Ù
Û Ø´ÙØ¯
alert(err);
}
}
f();
اگر try..catch ÙØ¯Ø§Ø´ØªÛÙ
Ø Ø¯Ø± اÛÙ ØµÙØ±Øª با ÙØ±Ø§Ø®ÙاÙÛ ØªØ§Ø¨Ø¹ ()f ÛÚ© Promise ساخت٠Ù
Û Ø´ÙØ¯ ک٠رد شد٠است. Ù
ا Ù
Û ØªÙØ§ÙÛÙ
Ø¨Ø±Ø§Û Ù
Ø¯ÛØ±Ûت اÛÙ ØØ§Ùت catch. را ب٠آ٠اضاÙÙ Ú©ÙÛÙ
:
async function f() {
let response = await fetch('http://no-such-url');
}
// f() ب٠ÛÚ© Promise رد شد٠تبدÛÙ Ù
Û Ø´ÙØ¯
f().catch(alert); // TypeError: failed to fetch // (*)
اگر ÙØ±Ø§Ù
ÙØ´ Ú©ÙÛÙ
Ú©Ù catch. را اضاÙÙ Ú©ÙÛÙ
Ø Ø¯Ø± ÙØªÛØ¬Ù Ø¨Ù Ø®Ø·Ø§Û unhandled promise error Ù
Û Ø®ÙØ±ÛÙ
(در Ú©ÙØ³ÙÙ ÙØ§Ø¨Ù Ù
Ø´Ø§ÙØ¯Ù است). ÙÙ
Ø§ÙØ·Ùر ک٠در بخش Ù
Ø¯ÛØ±Ûت Ø§Ø±ÙØ±Ùا با promiseÙØ§ ØªÙØ¶ÛØ Ø¯Ø§Ø¯Ù Ø´Ø¯Ø Ù
ا Ù
ÛØªÙاÙÛÙ
با Ø§Ø³ØªÙØ§Ø¯Ù از ÛÚ© Ù
Ø¯ÛØ±Ûت Ø§ØªÙØ§Ù unhandledrejection Ú©ÙÛ ÚÙÛÙ Ø®Ø·Ø§ÙØ§ÛÛ Ø±Ø§ Ù
Ø¯ÛØ±Ûت Ú©ÙÛÙ
.
async/await Ù promise.then/catchزÙ
اÙÛ Ú©Ù Ù
ا از async/await Ø§Ø³ØªÙØ§Ø¯Ù Ù
Û Ú©ÙÛÙ
Ø Ú©Ù
تر Ù¾ÛØ´ Ù
ÛØ§Ûد ک٠ب٠then. ÙÛØ§Ø² Ø´ÙØ¯Ø Ø²ÛØ±Ø§ await Ø®ÙØ¯ ÙØ±Ø¢ÛÙØ¯ Ù
تÙÙ٠شد٠را Ù
Ø¯ÛØ±Ûت Ù
Û Ú©ÙØ¯. ÙÙ
ÚÙÛÙ Ù
Û ØªÙØ§ÙÛÙ
Ø¨Ù Ø¬Ø§Û catch. از try..catch Ø¹Ø§Ø¯Û Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ
. اÛ٠کار Ù
عÙ
ÙÙØ§ (Ù ÙÙ ÙÙ
ÛØ´Ù) Ø¨Ø³ÛØ§Ø± Ø±Ø§ØØª تر است.
اÙ
ا در کد Ø³Ø·Ø Ø¨Ø§ÙØ§Ø زÙ
اÙÛ Ú©Ù Ù
ا Ø¨ÛØ±Ù٠از ÙØ± تابع async Ø§Û ÙØ³ØªÛÙ
Ø Ù
ا Ø¨Ù Ø¯ÙØ§ÛÙÛ Ø³ÛÙØªÚ©Ø³Û ÙÙ
Û ØªÙØ§ÙÛÙ
از await Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ
Ø Ø¨ÙØ§Ø¨Ø±Ø§Û٠اÛÙ ÛÚ© کار Ø¹Ø§Ø¯Û Ø§Ø³Øª Ú©Ù Ø¨Ø±Ø§Û Ù
Ø¯ÛØ±Ûت ÙØªÛج٠ÙÙØ§ÛÛ ÛØ§ Ø¨Ø±Ø®ÙØ±Ø¯Ù با Ø®Ø·Ø§ÙØ§Û Ø§ØØªÙ
اÙÛ then/catch. را اضاÙÙ Ú©ÙÛÙ
Ø Ù
اÙÙØ¯ خط (*) در Ù
Ø«Ø§Ù Ø¨Ø§ÙØ§.
async/await Ø¨Ù Ø®ÙØ¨Û با Promise.all کار Ù
Û Ú©ÙØ¯Ø²Ù
اÙÛ Ú©Ù ÙÛØ§Ø² دارÛÙ
تا زÙ
Ø§Ù Ø§Ø¬Ø±Ø§Û ÚÙØ¯ Promise صبر Ú©ÙÛÙ
Ø Ù
Û ØªÙØ§ÙÛÙ
ÙÙ
٠آÙÙØ§ را در ÛÚ© Promise.all ÙØ±Ø§Ø± دÙÛÙ
٠سپس از await Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ
:
// Ø¨Ø±Ø§Û Ø¢Ø±Ø§Û٠از ÙØªÛØ¬Ù ÙØ§ صبر Ù
Û Ú©ÙÛÙ
let results = await Promise.all([
fetch(url1),
fetch(url2),
...
]);
در Ø´Ø±Ø§ÛØ· Ø¨Ø±ÙØ² خطا Ø¨Ù ØµÙØ±Øª Ù
عÙ
Ù٠خطا از Promise ÙØ§Ù
ÙÙ٠ب٠Promise.all Ù
ÙØªÙÙ Ù
Û Ø´ÙØ¯ ٠سپس ب٠ÛÚ© exception تبدÛ٠شد٠ک٠Ù
Û ØªÙØ§Ù با ÙØ±Ø§Ø± داد٠try..catch آ٠را Ù
Ø¯ÛØ±Ûت کرد.
Ø®ÙØ§ØµÙ
Ú©ÙÛØ¯ÙاÚÙ async ÙØ¨Ù از ÛÚ© تابع Ø¯Ù ØªØ§Ø«ÛØ± Ù
Û Ú¯Ø°Ø§Ø±Ø¯:
Û±. Ú©Ø§Ø±Û Ù
Û Ú©ÙØ¯ Ú©Ù ÙÙ
ÛØ´Ù ÛÚ© Promise Ø¨Ø±Ú¯Ø±Ø¯Ø§ÙØ¯.
Û². اجاز٠Ù
Û Ø¯ÙØ¯ ک٠در داخ٠آ٠از await Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ
.
Ú©ÙÛØ¯ÙاÚÙ await ÙØ¨Ù از Promise باعث Ù
Û Ø´ÙØ¯ تا اجرا شد٠آ٠صبر Ú©ÙØ¯ ٠سپس:
Û±. اگر خطاÛÛ Ø±Ø® Ø¯ÙØ¯Ø ÛÚ© exception Ø¨Ù ÙØ¬Ùد Ù
Û Ø¢ÛØ¯ â Ù
اÙÙØ¯ ØØ§ÙØªÛ Ú©Ù throw error در Ø¢Ù Ù
ØÙ ÙØ±Ø§Ø®ÙاÙÛ Ø´ÙØ¯.
Û². در ØºÛØ± اÛÙ ØµÙØ±ØªØ ÙØªÛج٠را برÙ
Û Ú¯Ø±Ø¯Ø§ÙØ¯.
اÛ٠د٠در Ú©ÙØ§Ø± ÙÙ ÚÙØ§Ø±ÚÙØ¨Û عاÙÛ Ø¨Ø±Ø§Û ÙÙØ´ØªÙ کد ÙØ§Û Ù٠ز٠ا٠(asynchronous) ÙØ±Ø§ÙÙ Ù Û Ú©ÙÙØ¯ Ú©Ù ÙÙ Ø¨Ø±Ø§Û ÙÙØ´ØªÙ Ù ÙÙ Ø¨Ø±Ø§Û Ø®ÙØ§ÙØ¯Ù Ø±Ø§ØØª است.
با async/await Ø¨Ù ÙØ¯Ø±Øª ÙÛØ§Ø² ب٠ÙÙØ´ØªÙ promise.then/catch دارÛÙ
اÙ
ا ÙØ¨Ø§Ûد ÙØ±Ø§Ù
ÙØ´ Ú©ÙÛÙ
ک٠آÙÙØ§ بر پاÛÙ Promise ÙØ§ ÙØ³ØªÙد ÚÙÙ Ø¨Ø±Ø®Û Ø§ÙÙØ§Øª (Ù
اÙÙØ¯ Ø¨ÛØ±ÙÙÛ ØªØ±ÛÙ Ù
ÙØ·ÙÙ) Ù
ا Ø¨Ø§ÛØ¯ از اÛÙ Ù
تد ÙØ§ Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ
. ÙÙ
ÚÙÛ٠زÙ
اÙÛ Ú©Ù Ù
Û Ø®ÙØ§ÙÛÙ
ÚÙØ¯ کار را Ø¨Ù Ø·ÙØ± ÙÙ
زÙ
Ø§Ù Ø§ÙØ¬Ø§Ù
دÙÛÙ
Promise.all گزÛÙÙ Ù
ÙØ§Ø³Ø¨Û است.
ÙØ¸Ø±Ø§Øª
<code>Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯Ø Ø¨Ø±Ø§Û ÚÙØ¯Û٠خط â کد را درÙ٠تگ<pre>ÙØ±Ø§Ø± دÙÛØ¯Ø Ø¨Ø±Ø§Û Ø¨ÛØ´ از د٠خط کد â Ø§Ø² ÛÚ© جعبÙÙ Ø´ÙÛ Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯. (plnkrØ jsbinØ codepenâ¦)