Sobes.tech
Junior

Kādus Promise veidus pazīsti?

sobes.tech AI

Atbilde no AI

Galvenie Node.js solījumu veidi:

  • Pamatsolījums: Ir konteineris nākotnes vērtībām vai kļūdām. Tam ir trīs stāvokļi: pending (gaida), fulfilled (veiksmīgi izpildīts), rejected (atsakts ar kļūdu). Izveido ar new Promise() konstruktoru:

    // Pamatsolījuma izveide
    const myPromise = new Promise((resolve, reject) => {
      // Asinhrona operācija
      setTimeout(() => {
        const success = true;
        if (success) {
          resolve("Operācija veiksmīgi pabeigta");
        } else {
          reject("Radās kļūda");
        }
      }, 1000);
    });
    
  • Promise.resolve(): Izveido solījumu, kas nekavējoties pāriet stāvoklī fulfilled ar norādīto vērtību:

    // Izpildīta solījuma izveide
    const resolvedPromise = Promise.resolve("Tas jau ir izpildīts solījums");
    
  • Promise.reject(): Izveido solījumu, kas nekavējoties pāriet stāvoklī rejected ar norādītu kļūdas iemeslu:

    // Noraidīta solījuma izveide
    const rejectedPromise = Promise.reject(new Error("Tas ir noraidīts solījums"));
    
  • Promise.all(): Pieņem solījumu masīvu un atgriež jaunu solījumu. Šis jauns solījums pāriet stāvoklī fulfilled, kad visi solījumi veiksmīgi pabeigti. Vērtība būs rezultātu masīvs, tādā pašā secībā kā ievades solījumi. Ja kāds solījums neizdodas, Promise.all() nekavējoties noraida ar pirmā neizdarušā solījuma iemeslu:

    // Promise.all() lietošana
    const promise1 = Promise.resolve(1);
    const promise2 = Promise.resolve(2);
    const promise3 = new Promise((resolve, reject) => setTimeout(() => resolve(3), 100));
    Promise.all([promise1, promise2, promise3])
      .then((values) => {
        // values būs [1, 2, 3]
      })
      .catch((error) => {
        // Kļūdu apstrāde
      });
    
  • Promise.allSettled(): Pieņem solījumu masīvu un atgriež jaunu solījumu. Šis jauns solījums pāriet stāvoklī fulfilled vai rejected, kad visi solījumi ir pabeigti. Vērtība būs objektiem masīvs, kas apraksta katra solījuma rezultātu:

    // Promise.allSettled() lietošana
    const promiseA = Promise.resolve("veiksmīgs");
    const promiseB = Promise.reject("kļūda");
    Promise.allSettled([promiseA, promiseB])
      .then((results) => {
        // results būs objektiem masīvs:
        // [{status: 'fulfilled', value: 'veiksmīgs'}, {status: 'rejected', reason: 'kļūda'}]
      });
    
  • Promise.race(): Pieņem solījumu masīvu un atgriež jaunu solījumu. Šis jauns solījums pāriet stāvoklī fulfilled vai rejected, kad pirmais solījums no masīva, kas vai nu veiksmīgi pabeidzas, vai noraidīts:

    // Promise.race() lietošana
    const promiseFast = new Promise((resolve, reject) => setTimeout(() => resolve("Es esmu ātrs!"), 50));
    const promiseSlow = new Promise((resolve, reject) => setTimeout(() => resolve("Es esmu lēns..."), 500));
    Promise.race([promiseFast, promiseSlow])
      .then((value) => {
        // value būs "Es esmu ātrs!"
      });
    
  • Promise.any(): Pieņem solījumu masīvu un atgriež jaunu solījumu. Šis jauns solījums pāriet stāvoklī fulfilled ar pirmās veiksmīgi pabeigtās solījuma vērtību. Ja visi solījumi ir noraidīti, Promise.any() atgriež kļūdu AggregateError, kas satur visu noraidīto solījumu iemeslus. Pieejams no Node.js 12:

    // Promise.any() lietošana
    const promiseFail1 = Promise.reject("Kļūda 1");
    const promiseSuccess = Promise.resolve("Veiksme!");
    const promiseFail2 = Promise.reject("Kļūda 2");
    Promise.any([promiseFail1, promiseSuccess, promiseFail2])
      .then((value) => {
        // value būs "Veiksme!"
      })
      .catch((error) => {
        // Apstrāde `AggregateError`, ja visi solījumi ir noraidīti
      });