قبل أن يُقدَّم صنف Promise، لم يكن هناك سوى أسلوب واحد للتعامل مع الكود غير المتزامن: نمط الاستدعاء الراجع.
الاستدعاء الراجع دالة تُمرَّر كوسيط إلى دالة أخرى، وتُستدعى بمجرد انتهاء إجراء ما في تلك الدالة الأخرى. ومن الشائع في دوال الاستدعاء الراجع هذه أن تقبل «خطأ» كمعامل أول (انظر المثال أدناه).
function callback(error, arg2, arg3) {}
وما علاقة ذلك بالكود غير المتزامن؟
تاريخيًا، استُخدمت دوال الاستدعاء الراجع لكي تتيح لنا القيام ببعض العمل بعد انتهاء مهمة غير متزامنة ودون حجب البرنامج بأكمله.
fetchProduct(productId, function (error, data) {
if (error) {
// Handle the error
} else {
// Do some work
}
});
في المثال أعلاه، تأخذ الدالة fetchProduct (وهي غير متزامنة) استدعاءً راجعًا كوسيط ثانٍ يحدد ما ينبغي فعله عند استرجاع بيانات المنتج.
لهذا التمرين هدفان:
promisify تحوّل دالة تستخدم «نمط رد النداء» إلى دالة تُرجع Promise. انظر المثال أدناه.function fetchProduct(productId, function(error, data) {
if (error) {
// Handle the error
} else {
// Make something with your data
}
})
const fetchProductAsPromise = promisify(fetchProduct);
// Now you got a function `fetchProductAsPromise`
// that returns a promise
fetchProductAsPromise(productId)
.then((data) => {})
.catch((error) => {});
Promise المدمجة التالية (دون استخدامها)all: تأخذ مصفوفة من الوعود وتُحل عندما تُحل كلها، أو تُرفض عندما يُرفض أحدها.allSettled: تأخذ مصفوفة من الوعود وتُحل عندما تستقر كلها، سواء أُحلّت أم رُفضت.race: تأخذ مصفوفة من الوعود وتُحل أو تُرفض بقيمة أول وعد يُحل أو يُرفض.any: تأخذ مصفوفة من الوعود وتُحل عندما يُحل أحدها، أو تُرفض عندما تُرفض كلها.سجّل في Exercism لتتعلّم وتتقن JavaScript عبر 37 مفهومًا159 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.