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

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 das count-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 Eigenschaft getCount die countService-Methode getCount() für den injizierten Dienst auf. Diese Methode gibt ein Versprechen zurück, das mit einem Zählwert gelöst wurde.

In der berechneten Eigenschaft isVisible versuche ich, auf den count-Wert zuzugreifen, der von der berechneten Eigenschaft getCount zurückgegeben wird. Wenn ich jedoch während des Debuggens den Wert von count protokolliere, wird er als undefiniert angezeigt, 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;
  }),
});
Beliebte Tutorials
Mehr>
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!