يتم دائمًا تنفيذ رد الاتصال الخاص بالوعد بعد التعليمات البرمجية المتزامنة
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() يغلفها في وعد تم حله. ولكن إذا قمت بتمرير وعد، فإنه فقط يعيد نفس الوعد.
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
هذا كل شيء! شكرا لقرائتكم هذا الحد. حتى المرة القادمة!
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3