Promise vs Observable

Az Observable és a Promise mindkettő aszinkron adatáramokat kezel az Angularban és a modern JavaScript-ben is, de különbözőek a működési mechanizmusaik, képességeik és használati esetük. Lássuk a fő különbségeket:

  1. Egyszeri vs. Többszörös Értékek:
    • Promise: Egy egyszeri értéket ad vissza vagy dob egy hibát. Nem képes többszörös értékeket kibocsátani.
    • Observable: Többszörös értékeket képes kibocsátani az idő múlásával.
  2. Feliratkozás és Leiratkozás:
    • Promise: Amint egy Promise létrejön, azonnal elindul. Nincs mód a végrehajtás “megállítására” vagy “lemondására”.
    • Observable: Az Observable csak akkor kezd el adatokat kibocsátani, amikor feliratkozunk rá a subscribe metódussal. Le is iratkozhatunk az Observable-ról, ami megállíthatja a végrehajtást vagy felszabadíthatja az erőforrásokat.
  3. Operátorok:
    • Promise: Korlátozott műveletek vannak, mint például .then(), .catch() és .finally().
    • Observable: A rxjs könyvtárral rengeteg operátor érhető el, például map(), filter(), merge(), concat(), switchMap() és sok más, amelyek lehetővé teszik az adatáramok összetett manipulációját.
  4. Hiba Kezelés:
    • Promise: A .catch() metódussal kezeli a hibákat.
    • Observable: Képes kibocsátani hibaüzeneteket, de a hiba után is folytathatja a működést, ha úgy van tervezve. A hibák kezelésére az error callback vagy az catchError operátor használható.
  5. Teljesítés:
    • Promise: A resolve() vagy reject() hívás után teljesül.
    • Observable: A complete() metódus hívásával jelezheti, hogy nincs több adat a kibocsátásra.
  6. Létrehozás:
    • Promise: Általában az aszinkron műveletek, mint a HTTP kérések, natívan Promise-ként térnek vissza.
    • Observable: Az rxjs könyvtárral hozható létre, és gyakran használják az Angular események, formályok és HTTP kérések kezelésére.

Összefoglalva, bár az Observable és a Promise mindkettő aszinkron adatáramok kezelésére szolgál, az Observable sokkal rugalmasabb és sokoldalúbb, míg a Promise egyszerűbb és közvetlenül az ECMAScript specifikáció része. Az Angularban gyakran az Observable-t preferálják az integráció és a rugalmasság miatt, de mindkettőnek megvan a maga helye és előnye az aszinkron programozásban.

Was this page helpful?