In redux-observable
ist es möglich, isomporphic-fetch anstelle von Rx.DOM.ajax zu verwenden?Verwenden Sie Fetch anstelle von Ajax mit Redux-Observable
Antwort
(Hinweis: RX.DOM.ajax
ist von RxJS v4 und mit redux-observable
nicht die RxJS v5 erfordert Arbeit Das Äquivalent in v5 ist Rx.Observable.ajax
oder import { ajax } from 'rxjs/observable/ajax';
.)
Es ist in der Tat möglich fetch()
sowie jede zu verwenden andere AJAX API; obwohl einige sich leichter anpassen als andere!
fetch()
Die API gibt einen Promise
, die v5 RxJS hat eine eingebaute Unterstützung für. Die meisten Operatoren, die eine Observable erwarten, können Promises unverändert übernehmen (wie mergeMap
, switchMap
, usw.). Aber oft möchtest du Rx-Operatoren auf die Verheißung anwenden, bevor du sie an den Rest deiner Epik weiterleitest, also wirst du oft die Verheißung in ein Observable einhüllen wollen.
Sie können ein Versprechen in eine beobachtbare wickeln mit Observable.from(promise)
Hier ist ein Beispiel, wo ich für einen Benutzer zu holen, fordern Sie die JSON-Antwort, dann wickeln Sie das Versprechen in einer beobachtbaren:
const api = {
fetchUser: id => {
const request = fetch(`https://jsonplaceholder.typicode.com/users/${id}`)
.then(response => response.json());
return Observable.from(request);
}
};
Sie können das dann in Ihrem Epic konsumieren und alle gewünschten Operatoren anwenden:
Hier ist ein JSBin mit diesem Arbeitsbeispiel: https://jsbin.com/fuwaguk/edit?js,output
Wenn Sie die Kontrolle über den API-Code haben, im Idealfall würden Sie Observable.ajax
(oder andere beobachtbare-basierte AJAX utils) verwenden, weil Versprechen nicht abgebrochen werden kann. (zum jetzigen Zeitpunkt)
- 1. Verwenden Sie sha256 Hashes anstelle von Klartextpasswörtern
- 2. Fetch nur PHP Antwort mit AJAX
- 3. Sollte ich einen Iframe anstelle von Ajax verwenden?
- 4. Verwenden Sie äußere anstelle von expand.grid
- 5. Warum verwenden Sie select() anstelle von sleep()?
- 6. So verwenden Sie SensorManager.getOrientation() anstelle von TYPE_ORIENTATION
- 7. Verwenden Sie TypeScript lib.core.d.ts anstelle von lib.d.ts
- 8. Verwenden Sie datetime anstelle von mysql now()?
- 9. So verwenden Sie anstelle von IsNull
- 10. Wie verwenden Sie Schrägstriche anstelle von einem Hash (#) in history.js?
- 11. Verwenden Sie Windows-Authentifizierung mit ASP.Net AJAX
- 12. So verwenden Sie jQuery .live() mit AJAX
- 13. JQuery Tabs Link anstelle von Ajax
- 14. React Native auf Android, Ajax-Aufruf mit Fetch schlägt fehl
- 15. Was anstelle von org.jboss.resteasy.client.ClientRequest verwenden?
- 16. Verwenden von MVC3 childactiononly Attribut mit Ajax
- 17. Verwenden Sie jQuery zum Senden von Excel-Daten mit AJAX
- 18. Wie Socket fetch verwenden Webseite verwenden Python
- 19. So holen Sie XML mit fetch api
- 20. Verwenden von MockitoJUnitRunner.class anstelle von SpringJUnit4ClassRunner.class
- 21. Warum verwenden Sie anstelle von console.log das $ log von angular?
- 22. Verwenden von Objekten anstelle von GET
- 23. Verwenden Sie Ajax in Schienen
- 24. So verwenden Sie Sitzungen anstelle einer Abfragezeichenfolge
- 25. Verwenden von Ajax mit Google Analytics
- 26. Verwenden von Ajax mit asp.net mvc
- 27. Verwenden von Methodenreferenz anstelle von Multiargument Lambda
- 28. Warum verwenden Sie {} anstelle von new Object() und verwenden Sie [] anstelle von new Array() und true/false anstelle von new Boolean()?
- 29. Verwenden Sie Textfeld anstelle der Schaltfläche zum Übergeben von Daten
- 30. Verwenden von QChecksum anstelle von Boost crc16
Danke, Jay, für die Erklärung! – zatziky