2017-08-29 1 views
0

Ich bin eine Anwendung mit reaktionsnativen mit Redux-Observable. Gerade jetzt kämpfe ich um eine einfache Dekoration über zwei Aktionen in redux-beobachtbar mit einem Epos. Was ich versuche zu erreichen, besteht einfach darin, zwei Aktionen auf eins zu mappen.Sequenzieren von zwei Aktionen zusammen mit einem Epic in Redux-Observable

Der Fehler Ich erhalte ist:

You provided an invalid object where a stream was expected. You can provide an Observable, Promise, Array, or Iterable. 

Hier ist der Code ich verwende:

import { Observable } from 'rx'; 
 

 
export const startApplicationEpic = (action$: Observable) => 
 
    action$ 
 
    .ofType('START_APPLICATION') 
 
    .flatMap(() => 
 
     Observable.of(
 
     { type: 'REGISTER_PUSH_NOTIFICATIONS'}, 
 
     { type: 'AUTHENTICATION_REQUEST' } 
 
    ) 
 
    ); 
 
    
 
// index.js 
 

 
store.dispatch({ type: 'START_APPLICATION' })

Für mich ist der RxJS Code ich verwende gültig ist, und wenn Epen ein Stream sind, dann sollte das funktionieren, oder ist es nur möglich, eine einzelne Aktion aus einem Epic zu versenden?

+2

Welche Linie führt den Fehler? Bist du sicher, dass es irgendwo in dem Code ist, den du hier gezeigt hast? Wahrscheinlich möchten Sie auch von 'rxjs' und nicht' rx' importieren. – martin

+1

Auch ich stimme zu, dass es verdächtig ist - verwenden Sie den v4-Adapter (redux-observable-adapter-rxjs-v4)? Wenn nicht, wirst du definitiv v5 verwenden müssen, das auf npm als 'rxjs' nicht' rx' veröffentlicht wird. – jayphelps

+0

Danke martin, das war das Problem. Ich brauchte rxjs anstelle von rx, was eine Abhängigkeit von redux-beobachtbar ist, dann hat alles gut funktioniert. Ich denke, unter der Haube haben sie einige Unterschiede. –

Antwort

2

Es scheint, dass Sie rx importieren (das ist V4) anstelle von rxjs (das ist V5). Ihr Code liefert also ein v4 Observable für die flatMap eines v5 Observable (redox-beobachtbare Interna geben Ihnen standardmäßig v5). Die zwei Versionen können standardmäßig nicht interoperieren, aber es gibt . Ich gebe zu, das ist alles ziemlich verwirrend.

Der beste Weg, um v4 mit Redux-Observable zu verwenden, ist, den Adapter, den wir für ihn erstellt haben, mit einzuschließen redux-observable-adapter-rxjs-v4. Wenn Sie v4 bei einem Unfall verwenden oder es sonst keinen Unterschied macht, verwenden Sie stattdessen v5.

Sobald Sie das in Ordnung bringen, wird der Code wie vorgesehen funktioniert wie erwartet, ohne Fehler: https://jsbin.com/xiqigi/edit?js,console

+0

Ich schlug mir zwei Stunden lang den Kopf und überprüfte die Projekte nicht. Danke für die Eingabe. –

Verwandte Themen