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