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

كيفية إرجاع قيمة تم حلها من وظيفة غير متزامنة داخل وظيفة غير متزامنة أخرى؟

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

How to Return a Resolved Value from an Async Function Within Another Async Function?

كيفية إرجاع قيمة من دالة غير متزامنة؟

في التعليمات البرمجية المقدمة، تقوم طريقة init () بإرجاع وعد، ولكن تحاول طريقة getPostById() الوصول إلى القيمة التي أرجعها الوعد مباشرةً. لحل هذه المشكلة، يجب تعديل طريقة init() لإرجاع قيمة getPostById() بعد حل الوعد.

إليك الكود المحدث:

class Posts {
  constructor(url) {
    this.ready = false
    this.data = {}
    this.url = url
  }
  async init() {
      try { 
        let res = await fetch( this.url )
        if (res.ok) {
            let data = await res.json()

          // Do bunch of transformation stuff here

          this.data = data
          this.ready = true
          return this.getPostById(4)  // Return the value of getPostById()
        }
      } 
      catch (e) { 
         console.log(e)
      }
  }
  getPostById(id){
     return this.data.find( p => p.id === id )
  }
}  

الآن، يمكن كتابة الدالة myFunc على النحو التالي:

let myFunc = async () => {
   const postId = 4
   await allPosts.init()  // I need to wait for this to finish before returning

   // This is logging correct value
   console.log( 'logging: '   JSON.stringify(allPosts.getPostById( postId ), null, 4) )

   // Return the RESULT of allPosts.getPostById( postId ) ???
   return await allPosts.getPostById( postId )
}

سيرجع هذا الرمز بشكل صحيح قيمة getPostById().

بيان الافراج أعيد طبع هذه المقالة على: 1729216637 في حالة وجود أي انتهاك، يرجى الاتصال بـ [email protected] لحذفها
أحدث البرنامج التعليمي أكثر>

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

Copyright© 2022 湘ICP备2022001581号-3