Flux / Alt Datenabhängigkeit, wie man elegant und idiomatisch umgeht

Ich benutze alt als meine Flussmittelimplementierung für ein Projekt und ich habe Probleme, die beste Art und Weise zu beschreiben, wie das Laden von Geschäften für zwei verbundene Entitäten gehandhabt wird. Ich benutze sources -Funktion zusammen mit registerAsync, um meine Async / API-Aufrufe zu verarbeiten und sie mit AltContainer an meine Ansichten zu binden.

Ich habe zwei Entitäten, die durch die Konversations-ID eins zu eins verknüpft sind. Beide werden über einen API-Aufruf geladen:

Nachdem mein Job-Store mit Daten geladen wurde, möchte ich einen Konversations-Store füllen.

Ich verwende eine Quelle zum Laden des Jobspeichers:

module.exports = {
    fetchJobs() {
        return {
            remote() {
                return axios.get('api/platform/jobs');

            },....

Scheint wie ein Job für diewarten auf( -Methode, wird jedoch verwendet, wenn der Inhalt eines Geschäfts eine Umwandlung oder Zusammenführung mit dem Inhalt eines anderen Geschäfts erfordert. Ich muss den Inhalt eines Datenspeichers basierend auf dem Inhalt eines anderen abrufen.

m Allgemeinen muss ich:

ufen Sie eine Drittanbieter-API auf und laden Sie eine Liste von Entitäten in ein GeschäfWenn diese Daten eintreffen, muss ich Attribute aus den oben genannten Elementen verwenden, um eine andere API aufzurufen und diese Daten in einen anderen Speicher zu laden.

Meine naive Lösung besteht darin, auf die Konversationsaktionen aus dem Jobspeicher zu verweisen und ein Ereignis auszulösen, wenn die Daten eintreffen. Etwas wie das

var jobActions = require('../actions/Jobs');
var conversationActions = require('../actions/Conversations');

class JobStore {
    constructor() {
        this.bindListeners({
            handlefullUpdate: actions.success
        });...

    }

    handlefullUpdate(jobs) {
        this.jobs = jobs;
        conversationActions.fetch.defer(jobs);
    }
}

Natürlich verstößt dies gegen das Gebot, dass Läden keine Ereignisse auslösen sollten, und daher muss ich die Funktion "Aufschieben" verwenden, um eine Aktion mitten in einer Auslösung auszulösen. Für mich ist es sinnvoll, da ich auf diesem Weg scheinbar alle möglichen Nebenwirkungen in meinen Code zurückbringe. die Schönheit der "funktionalen Pipelines" zu verlieren, die ich mit Fluss sehen sollte.

Auch mein Job Store muss einen Verweis auf abhängige Entitäten enthalten, damit er die entsprechende Aktion auslösen kann. Hier habe ich nur einen, aber ich könnte mir viele vorstellen. In Bezug auf die Abhängigkeiten zwischen Entitäten scheint dies völlig rückständig zu sein.

Ein paar Alternativen kommen in den Sinn:

Ich kann das @ anruf api / platform / jobs Endpunkt in der Quelle / Aktion, an dem ich alle Konversationen abrufe, nur um die ID zu erhalten. Der ursprüngliche Ansatz ist effizienter, aber dies scheint dem Geist des Flusses darin wahrer zu sein, dass ich das gesamte Nebensprechen verlier

Ich könnte auch eine einzelne Aktion / Quelle haben, die beide abruft und @ zurückgib{jobs:{}, conversations: in the action} (Orchestrierung der Abhängigkeit mithilfe von Versprechungen) und füllen Sie damit beide Stores. Aber dieser Ansatz erscheint mir unnötig kompliziert (ich habe das Gefühl, ich sollte es nicht tun müssen!).

Aber vermisse ich einen anderen Weg? Es ist seltsam, dass ein solcher Anwendungsfall die Eleganz des Flux-Paradims durchbrechen und / oder mich zwingen würde, durch so viele Reifen zu springen.

@ dougajmcdonald stellte eine ähnliche FrageHie, aber vielleicht wurde es zu allgemein formuliert und bekam keine Traktion:

Antworten auf die Frage(6)

Ihre Antwort auf die Frage