Die berechneten Eigenschaften von Ember.js warten nicht auf asynchrone RSVP-Versprechen
P粉549412038
P粉549412038 2023-09-13 23:28:44
0
1
2492

Ich habe eine Ember.js-Komponente und versuche, eine berechnete Eigenschaft zu verwenden, um deren Sichtbarkeit basierend auf den Ergebnissen eines asynchronen RSVP-Versprechens zu bestimmen. Allerdings scheint die berechnete Eigenschaft nicht auf die Auflösung des Versprechens zu warten, was dazu führt, dass dascount-Objekt undefiniert ist.

Hier ist ein Auszug meines Komponentencodes:

import Component from '@ember/component'; import { computed } from '@ember/object'; import { inject as service } from '@ember/service'; import RSVP from 'rsvp'; export default Component.extend({ classNames: ['count'], countService: service('count'), getCount: computed(function () { debugger; RSVP.all([ this.get('countService').getCount() ]).then(([count]) => { return Number(count); }); }), isVisible: computed('getCount', function () { debugger; let count = this.get('getCount'); return count !== undefined && count > 0; }), });

Wie Sie sehen können, ruft die berechnete EigenschaftgetCountdie countService-MethodegetCount() für den injizierten Dienst auf. Diese Methode gibt ein Versprechen zurück, das mit einem Zählwert gelöst wurde.

In der berechneten EigenschaftisVisibleversuche ich, auf dencount-Wert zuzugreifen, der von der berechneten EigenschaftgetCountzurückgegeben wird. Wenn ich jedoch während des Debuggens den Wert voncountprotokolliere, wird er alsundefiniertangezeigt, obwohl das Versprechen zu diesem Zeitpunkt bereits gelöst sein sollte.

Ich bin mir nicht sicher, warum berechnete Eigenschaften nicht auf die Auflösung des Versprechens warten, bevor sie versuchen, auf den Wert zuzugreifen. Fehlt mir etwas in meiner Implementierung? Gibt es eine bessere Möglichkeit, asynchrone Abhängigkeiten in den berechneten Eigenschaften von Ember.js zu verarbeiten?

Jede Hilfe oder Einsicht wäre sehr dankbar!

P粉549412038
P粉549412038

Antworte allen (1)
P粉505917590

请您尝试一次吗?我还没有测试过,但希望这是有道理的。

import Component from '@ember/component'; import { computed } from '@ember/object'; import { inject as service } from '@ember/service'; import RSVP from 'rsvp'; export default Component.extend({ classNames: ['count'], countService: service('count'), getCount: computed(function() { return RSVP.all([this.get('countService').getCount()]).then(([count]) => { return Number(count); }); }), isVisible: computed('getCount', function() { let count = this.get('getCount'); return count !== undefined && count > 0; }), });
    Neueste Downloads
    Mehr>
    Web-Effekte
    Quellcode der Website
    Website-Materialien
    Frontend-Vorlage
    Über uns Haftungsausschluss Sitemap
    Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!