Promises, Promises – انجمن DEV
Summarize this content to 400 words in Persian Lang
قول میدهم به Promises برسم، اما اول…
فرض کنید ما در حال اجرای برخی از وظایف بالقوه بسیار وقت گیر هستیم، و چون نمی خواهیم برنامه خود را در لحظه ای که مفسر شروع به انجام وظیفه می کند، متوقف کنیم، باید راهی پیدا کنیم تا تابعی داشته باشیم که عملیاتی را انجام دهد و همچنان اجازه می دهد تا برنامه اجرا شود. این اساساً همان کاری است که توابع برگشت تماس انجام می دهند.
هنگامی که یک تابع به تابع دیگری منتقل می شود، مقدار تفکیک شده آن اساساً می تواند در آن تابع ذخیره شود و پس از فراخوانی تابع خارجی به آن دسترسی داشته باشید.
به عنوان مثال، اگر بخواهیم یک دور اردک-اردک-غاز را توصیف کنیم، میتوانیم آن را با استفاده از callbacks انجام دهیم:
//we define two functions that take callback function parameters
function duck(cbFunc){
let duck = “…duck…”
//and invoke those callbacks on some value
cbFunc(duck)
}
function goose(cbFunc){
let goose = “…goose!”
cbFunc(goose)
}
//now we write a function to play duck-duck-goose
function playDDG(){
//we call duck passing in a function that…
duck(person1 => {
//…logs the input of the passed-in function…
console.log(person1)
//…and calls duck passing in a function that…
duck(person2 => {
//…logs the input of the passed-in function…
console.log(person2)
//…and calls goose passing in a function that…
goose(person3 =>{
//…logs the input of the passed-in function.
console.log(person3)
})
})
})
}
console.log(playDDG())
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
در حالی که این یک راه حل موثر برای مسئله ذخیره یک مقدار حل شده تا زمانی است که مورد نیاز باشد، نحو توابع تودرتو می تواند به سرعت از محدوده خوانایی خارج شود.
اینجاست که به قول قبلی ام عمل می کنم.
شی Promise نشان دهنده تکمیل (یا شکست) نهایی یک عملیات ناهمزمان و مقدار حاصل از آن (MDN) است.
اگرچه بیان شیواتر از مستندات رسمی دشوار است، اما شاید بتوانیم چیزهایی را در مورد آنها بیان کنیم تا درک جامع تری ایجاد کنیم.
Promises اشیا هستند، پروکسی برای مقدار دیگری که هنوز توسط برنامه قابل دسترسی نیست
اشیاء Promise ایجاد می شوند و کد ناهمزمان برای اجرا به آنها داده می شود.
اشیاء Promise جدید تا دو پارامتر را می گیرند: یک تابع فراخوان برای یک وعده محقق شده.یک تابع فراخوانی برای انجمن قول رد شده.
وعده ها یکی از سه حالت را دارند:
در انتظار، حل نشده یا رد نشده است
محقق شد، وعده حل شد
رد شد قول رد شد 🙁
وعدهها بهعنوان جایگزینی برای تماسهای برگشتی استفاده میشوند، زیرا میتوانند زنجیرهای شوند.
چون یک شیء است، روش هایی دارد. یکی از آنها این است. سپس ().
فرض کنید یک شی Promise داریم:
//it takes a resolve callback and a reject callback
let mathPromise = new Promise((resolve, reject) =>{
//we do some operation inside
let three = 3;
let four = 4;
if (three + four === 7){
//if we have met the criteria, we resolve
resolve(`Yes it is ${three + four}`)
} else {
//if not we reject
reject(“…no”)
}})
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
متد .then() به ما میگوید که در صورت حلوفصل شدن وعده برگردانده شده، در مرحله بعد چه کاری انجام دهیم. این خواهر و برادر ماهی جهش یافته ساکن در زیرزمین، روش .catch() است، برای اینکه متوجه شوید که مشکلی در جایی پیش آمده است و یک خطا ایجاد می کند.
//if mathPromise returns resolved, then
mathPromise.then((thenFuncVal) => {
//log the value of the successful resolve
console.log(thenFuncVal)
}).catch((catchFuncVal)=>{
console.log(catchFuncVal)
})
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
Callback ها در شی ذخیره می شوند.then() فراخوانی می شود و یک شی وعده جدید برگردانده می شود، بنابراین این فراخوانی های متد زنجیره ای هستند.
//we make a new promise
let wordPromise = new Promise((resolve, reject)=>{
let word1 = “hello”
let word2 = “HELLO”
if (word1 === word2.toLowerCase()){
resolve(“I heard you the first time”)
} else {
reject(“WHAT?”)
}
})
//we verify our mathPromise
mathPromise.then((thenFuncVal) => {
console.log(thenFuncVal)
//and if it resolves, we return our wordPromise object
return wordPromise
})
//and then we verify that returned wordPromise
.then((thenFuncVal) => {
console.log(thenFuncVal)
})
//and if anything gets rejected, we make sure to indicate that rejection
.catch((catchFuncVal)=>{
console.log(catchFuncVal)
})
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
اگر مقداری را در mathPromise طوری تغییر دهیم که رد شود، مقدار را در قسمت reject آن شرطی ثبت میکنیم، اما دیگر wordPromise را ارزیابی نمیکنیم.
در حالی که هدف این کار فقط توصیف عملکرد مکانیکی اشیاء وعده است، استفاده از آنها در برنامه نویسی ناهمزمان ضروری است. آنها عملکرد استفاده از callbacks را حفظ می کنند در حالی که می توانند از نحو روش شی استفاده کنند.
منبع عالی در مورد وعده ها
MDN: جاوا اسکریپت ناهمزمان
MDN: قول می دهد
قول میدهم به Promises برسم، اما اول…
فرض کنید ما در حال اجرای برخی از وظایف بالقوه بسیار وقت گیر هستیم، و چون نمی خواهیم برنامه خود را در لحظه ای که مفسر شروع به انجام وظیفه می کند، متوقف کنیم، باید راهی پیدا کنیم تا تابعی داشته باشیم که عملیاتی را انجام دهد و همچنان اجازه می دهد تا برنامه اجرا شود. این اساساً همان کاری است که توابع برگشت تماس انجام می دهند.
هنگامی که یک تابع به تابع دیگری منتقل می شود، مقدار تفکیک شده آن اساساً می تواند در آن تابع ذخیره شود و پس از فراخوانی تابع خارجی به آن دسترسی داشته باشید.
به عنوان مثال، اگر بخواهیم یک دور اردک-اردک-غاز را توصیف کنیم، میتوانیم آن را با استفاده از callbacks انجام دهیم:
//we define two functions that take callback function parameters
function duck(cbFunc){
let duck = "...duck..."
//and invoke those callbacks on some value
cbFunc(duck)
}
function goose(cbFunc){
let goose = "...goose!"
cbFunc(goose)
}
//now we write a function to play duck-duck-goose
function playDDG(){
//we call duck passing in a function that...
duck(person1 => {
//...logs the input of the passed-in function...
console.log(person1)
//...and calls duck passing in a function that...
duck(person2 => {
//...logs the input of the passed-in function...
console.log(person2)
//...and calls goose passing in a function that...
goose(person3 =>{
//...logs the input of the passed-in function.
console.log(person3)
})
})
})
}
console.log(playDDG())
در حالی که این یک راه حل موثر برای مسئله ذخیره یک مقدار حل شده تا زمانی است که مورد نیاز باشد، نحو توابع تودرتو می تواند به سرعت از محدوده خوانایی خارج شود.
اینجاست که به قول قبلی ام عمل می کنم.
شی Promise نشان دهنده تکمیل (یا شکست) نهایی یک عملیات ناهمزمان و مقدار حاصل از آن (MDN) است.
اگرچه بیان شیواتر از مستندات رسمی دشوار است، اما شاید بتوانیم چیزهایی را در مورد آنها بیان کنیم تا درک جامع تری ایجاد کنیم.
Promises اشیا هستند، پروکسی برای مقدار دیگری که هنوز توسط برنامه قابل دسترسی نیست
اشیاء Promise ایجاد می شوند و کد ناهمزمان برای اجرا به آنها داده می شود.
اشیاء Promise جدید تا دو پارامتر را می گیرند:
یک تابع فراخوان برای یک وعده محقق شده.
یک تابع فراخوانی برای انجمن قول رد شده.
وعده ها یکی از سه حالت را دارند:
- در انتظار، حل نشده یا رد نشده است
- محقق شد، وعده حل شد
- رد شد قول رد شد 🙁
وعدهها بهعنوان جایگزینی برای تماسهای برگشتی استفاده میشوند، زیرا میتوانند زنجیرهای شوند.
چون یک شیء است، روش هایی دارد. یکی از آنها این است. سپس ().
فرض کنید یک شی Promise داریم:
//it takes a resolve callback and a reject callback
let mathPromise = new Promise((resolve, reject) =>{
//we do some operation inside
let three = 3;
let four = 4;
if (three + four === 7){
//if we have met the criteria, we resolve
resolve(`Yes it is ${three + four}`)
} else {
//if not we reject
reject("...no")
}})
متد .then() به ما میگوید که در صورت حلوفصل شدن وعده برگردانده شده، در مرحله بعد چه کاری انجام دهیم. این خواهر و برادر ماهی جهش یافته ساکن در زیرزمین، روش .catch() است، برای اینکه متوجه شوید که مشکلی در جایی پیش آمده است و یک خطا ایجاد می کند.
//if mathPromise returns resolved, then
mathPromise.then((thenFuncVal) => {
//log the value of the successful resolve
console.log(thenFuncVal)
}).catch((catchFuncVal)=>{
console.log(catchFuncVal)
})
Callback ها در شی ذخیره می شوند.then() فراخوانی می شود و یک شی وعده جدید برگردانده می شود، بنابراین این فراخوانی های متد زنجیره ای هستند.
//we make a new promise
let wordPromise = new Promise((resolve, reject)=>{
let word1 = "hello"
let word2 = "HELLO"
if (word1 === word2.toLowerCase()){
resolve("I heard you the first time")
} else {
reject("WHAT?")
}
})
//we verify our mathPromise
mathPromise.then((thenFuncVal) => {
console.log(thenFuncVal)
//and if it resolves, we return our wordPromise object
return wordPromise
})
//and then we verify that returned wordPromise
.then((thenFuncVal) => {
console.log(thenFuncVal)
})
//and if anything gets rejected, we make sure to indicate that rejection
.catch((catchFuncVal)=>{
console.log(catchFuncVal)
})
اگر مقداری را در mathPromise طوری تغییر دهیم که رد شود، مقدار را در قسمت reject آن شرطی ثبت میکنیم، اما دیگر wordPromise را ارزیابی نمیکنیم.
در حالی که هدف این کار فقط توصیف عملکرد مکانیکی اشیاء وعده است، استفاده از آنها در برنامه نویسی ناهمزمان ضروری است. آنها عملکرد استفاده از callbacks را حفظ می کنند در حالی که می توانند از نحو روش شی استفاده کنند.
منبع عالی در مورد وعده ها
MDN: جاوا اسکریپت ناهمزمان
MDN: قول می دهد