كيفية الإشارة إلى `api.addPosterIcon` من داخل دالة

مرحبًا،

هل يمكن لأي شخص أن ينصحني بكيفية الاستدعاء على api.addPosterIcon من داخل دالة؟

مثال:

<script type="text/discourse-plugin" version="0.8">
   api.onPageChange(url => {
       if (Discourse?.currentUser?.admin) {
           extract_associated_user_data();
       }
   });
   function extract_associated_user_data() {
       // الكثير من الكود أعلاه، والآن نحن مستعدون لاستدعاء دالة `addPosterIcon`
       api.addPosterIcon(function(data, attrs) {
            return { icon: 'user', className: 'customer' };       
       });
   }
</script>

إذا تم نقل api.addPosterIcon إلى المستوى العلوي، فإنها تعمل، ولكن عند تشغيلها من داخل extract_associated_user_data لا تفعل شيئًا على الإطلاق (لا يتم تنفيذها). ربما يكون this قد اختل داخليًا، لكنني لست متأكدًا من كيفية الاستدعاء عليه بأي حال. لقد جربت الكثير من الأشياء قبل نشر هذا السؤال.

آمل أن يكون هذا مفيدًا أيضًا لقراء التطوير في المستقبل.

نحن نستخدم أحدث إصدار من Discourse 2.8.0.beta6 (cba8b39607).

يبدو أن تنفيذ مقتطفات text/discourse-plugin في السمات على النحو التالي:

لا أرى أي ذكر مباشر لـ this هنا، مما يعني أنها لا تتعلق بـ this الضمني في JavaScript، ولا يمكن أن يكون الأمر متعلقًا بخروج api عن النطاق، لأن المقتطف تم لصقه هناك.

هل يعمل هذا المثال البسيط فعليًا؟ أي هل المشكلة ليست في الكود المحذوف؟

ملاحظة جانبية: يمكن استبدال المتغير العام Discourse وحقل currentUser الخاص به بـ api.getCurrentUser() هنا أيضًا:

عظيم، شكرًا لك.

أتساءل لماذا يعمل api.getCurrentUser() بشكل ممتاز من داخل الدالة بينما لا يزال api.addPosterIcon لا يعمل؟

أود أن أحاول استخدام واجهة برمجة التطبيقات الأصلية (Native API) قدر الإمكان بدلاً من كتابة حلول برمجية مخصصة (وهو أمر ليس مشكلة على الإطلاق).