اذهب إلى المحتوى

السؤال

نشر
 const myPromise = new Promise((resolveFunction, rejectFunction) => {
            let connect = true
            if(connect){
                resolveFunction("YES")
            } else {
                rejectFunction("NO")
            }
        }).then(
            (resolveValue) => console.log(`${resolveValue}, Done`),
            (rejectValue) => console.log(`${rejectValue}, Not Done`)
        )
        myPromise.then(
            (resolveValue) => console.log(`${resolveValue}, Done`),
            (rejectValue) => console.log(`${rejectValue}, Not Done`)
        )

السلام عليكم

الكود التالي يقوم بطباعة 

YES, Done
Undefined, Done
  1. لماذا قيمة الresolveValue اصبحت undefined في المرة الثانية؟ كيف اجعل السطر الثاني مساوي للسطر الاول؟
  2. ما هو الافضل: معالجة حالة الresolve وحالة الreject في البنية then أم معالجة الresolve في then و reject في catch؟ كلاها يعطي نفس النتيجة ما الفرق بينهما؟

شكرا لكم

 

Recommended Posts

  • 0
نشر

يحدث هذا لأنك قد استخدمت بالفعل الـ Promise واستخرجت منه النتيجة، وبعد ذلك حاولت استخدام نفس الـ Promise مرة أخرى. لذلك، يفترض أن تنشئ Promises جديدة إذا كنت تريد استخدامها مرات أخرى.

بالنسبة للسطر الثاني، يمكنك استخدام تسلسل من then دون أن تستدعي الـ Promise مرتين:

const myPromise = new Promise((resolveFunction, rejectFunction) => {
    let connect = true
    if(connect){
        resolveFunction("YES")
    } else {
        rejectFunction("NO")
    }
}).then(
    (resolveValue) => {
        console.log(`${resolveValue}, Done`)
        return resolveValue; // إعادة القيمة للاستخدام في الـ then التالي
    },
    (rejectValue) => console.log(`${rejectValue}, Not Done`)
).then(
    (resolveValue) => console.log(`${resolveValue}, Done`),
    (rejectValue) => console.log(`${rejectValue}, Not Done`)
);

بالنسبة للسؤال الثالث، الفرق بين معالجة حالة resolve وreject في البنية then ومعالجة resolve في then و reject في catch هو في تنظيم الكود ومرونة التعامل مع الأخطاء فقط. ولذلك، من الأفضل استخدام catch لمعالجة حالات الأخطاء الخاصة بالـ Promise، حيث يسهل تمييز الأخطاء وإدارتها بشكل منفصل.

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...