"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > حقائق ممتعة عن وعود جافا سكريبت

حقائق ممتعة عن وعود جافا سكريبت

تم النشر بتاريخ 2024-11-09
تصفح:833

fun facts about Javascript Promises

الوعود دائما غير متزامنة

يتم دائمًا تنفيذ رد الاتصال الخاص بالوعد بعد التعليمات البرمجية المتزامنة


const promise = Promise.resolve(); 
promise.then(() => console.log('async')); 
console.log('sync');

//sync
//async



الوعود المتسلسلة تعود بوعود جديدة

يقوم الوعد بإرجاع وعد جديد في كل مرة يتم استدعاءه


const p = Promise.resolve(); 
const chain = p.then(() => {}); 
console.log(p === chain); //false



إلى الأبد إذن ()

دعم الوعود التسلسل اللانهائي


Promise.resolve(1) 
    .then(value => value   1) 
    .then(value => value   1) 
    .then(value => console.log(value)); // 3



يمكنك تحويل عمليات الاسترجاعات إلى وعود

يمكنك تغليف التعليمات البرمجية القديمة التي تستخدم رد الاتصال في الوعد بالعمل مع المزامنة/الانتظار الحديثة


function asyncOperation(callback) { 
    setTimeout(() => callback(null, 'Im a callback'), 1000); 
} 

const promisified = () => new Promise((resolve, reject) => { 
    asyncOperation((err, result) => { 
        if (err) reject(err); 
        else resolve(result); 
    }); 
});

promisified().then(result => console.log(result)); // "Im a callback"



لا يُنشئ التابع Promise.resolve() دائمًا وعدًا جديدًا

إذا قمت بتمرير قيمة غير وعدية، فإن Promise.resolve() يغلفها في وعد تم حله. ولكن إذا قمت بتمرير وعد، فإنه فقط يعيد نفس الوعد.


const p1 = Promise.resolve('Hello'); 
const p2 = Promise.resolve(p1); 
console.log(p1 === p2); // true



يمكنك التعامل مع الأخطاء في أي مكان في السلسلة


Promise.reject('Error!')
  .then(() => console.log('This will not run'))
  .then(() => console.log('This will also not run'))
  .catch(err => console.log('Caught:', err))
  .then(() => console.log('This will run'));



أخيرًا () لا يمرر القيم

لا تتلقى الطريقة النهائية () القيم التي تم حلها أو تعديلها. يتم استخدامه لتنظيف الموارد ويتم تشغيله سواء تم حل الوعد أو رفضه.


Promise.resolve('resolved')
  .then(value => console.log(value))
  .finally(() => console.log('Cleanup'))

//resolved
//cleanup



الوعود غير قابلة للتغيير بمجرد تسويتها

بمجرد تسوية الوعد (حله أو رفضه)، تصبح حالته غير قابلة للتغيير. ولا يمكن تغييره بعد ذلك، حتى لو حاولت حله/رفضه مرة أخرى.


const p = new Promise((resolve, reject) => {
  resolve('First');
  resolve('Second');
});
p.then(value => console.log(value));  //"First" (only the first value is used)



يمكنك ربط الدالة الصيد () للتعامل مع أخطاء محددة


Promise.reject('type C error')
  .catch(err => {
    if (err === 'type A error') console.log('handle type A');
    throw err;
  })
  .catch(err => {
    if (err === 'type B error') console.log('handle type B');
    throw err;
  })
  .catch(err => {
    if (err === 'type C error') console.log('handle type C');
    throw err;
  })



يمكنك استخدام الانتظار مع القيم غير الواعدة


async function demo() {
  const result = await 42; //not a promise
  console.log(result);      
}
demo(); //42


هذا كل شيء! شكرا لقرائتكم هذا الحد. حتى المرة القادمة!

بيان الافراج تم إعادة نشر هذه المقالة على: https://dev.to/theteabagcoder/10-fun-facts-about-javascript-promises-3jle?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3