Maison > interface Web > js tutoriel > le corps du texte

faits amusants sur les promesses Javascript

Susan Sarandon
Libérer: 2024-10-07 20:21:30
original
188 Les gens l'ont consulté

fun facts about Javascript Promises

Les promesses sont toujours asynchrones

Le rappel de la promesse sera toujours exécuté après le code synchrone


const promise = Promise.resolve(); 
promise.then(() => console.log('async')); 
console.log('sync');

//sync
//async


Copier après la connexion

Les promesses enchaînées renvoient de nouvelles promesses

Promise renvoie ensuite une nouvelle promesse à chaque fois qu'elle est invoquée


const p = Promise.resolve(); 
const chain = p.then(() => {}); 
console.log(p === chain); //false


Copier après la connexion

Pour toujours alors()

Support des promesses chaînage infini


Promise.resolve(1) 
    .then(value => value + 1) 
    .then(value => value + 1) 
    .then(value => console.log(value)); // 3


Copier après la connexion

Vous pouvez convertir les rappels en promesses

Vous pouvez envelopper un code plus ancien qui utilise le rappel dans la promesse de fonctionner avec l'async/await moderne


function asyncOperation(callback) { 
    setTimeout(() => callback(null, 'Im a callback'), 1000); 
} 

const promisified = () => new Promise((resolve, reject) => { 
    asyncOperation((err, result) => { 
        if (err) reject(err); 
        else resolve(result); 
    }); 
});

promisified().then(result => console.log(result)); // "Im a callback"


Copier après la connexion

Promise.resolve() ne crée pas toujours une nouvelle promesse

Si vous transmettez une valeur non-Promise, Promise.resolve() l'enveloppe dans une promesse résolue. Mais si vous passez une promesse, elle renvoie simplement cette même promesse.


const p1 = Promise.resolve('Hello'); 
const p2 = Promise.resolve(p1); 
console.log(p1 === p2); // true


Copier après la connexion

Vous pouvez gérer les erreurs n’importe où dans la chaîne


Promise.reject('Error!')
  .then(() => console.log('This will not run'))
  .then(() => console.log('This will also not run'))
  .catch(err => console.log('Caught:', err))
  .then(() => console.log('This will run'));


Copier après la connexion

enfin() ne transmet pas les valeurs

La méthode enfin() ne reçoit ni ne modifie les valeurs résolues. Il est utilisé pour nettoyer les ressources et s'exécute que la promesse soit résolue ou rejetée.


Promise.resolve('resolved')
  .then(value => console.log(value))
  .finally(() => console.log('Cleanup'))

//resolved
//cleanup


Copier après la connexion

Les promesses sont immuables une fois réglées

Une fois qu'une promesse est réglée (résolue ou rejetée), son état est immuable. Il ne peut plus être modifié par la suite, même si vous essayez à nouveau de le résoudre/rejeter.


const p = new Promise((resolve, reject) => {
  resolve('First');
  resolve('Second');
});
p.then(value => console.log(value));  //"First" (only the first value is used)


Copier après la connexion

Vous pouvez chaîner catch() pour gérer des erreurs spécifiques


Promise.reject('type C error')
  .catch(err => {
    if (err === 'type A error') console.log('handle type A');
    throw err;
  })
  .catch(err => {
    if (err === 'type B error') console.log('handle type B');
    throw err;
  })
  .catch(err => {
    if (err === 'type C error') console.log('handle type C');
    throw err;
  })


Copier après la connexion

Vous pouvez utiliser wait avec des valeurs non promises


async function demo() {
  const result = await 42; //not a promise
  console.log(result);      
}
demo(); //42


Copier après la connexion

C'est ça ! Merci d'avoir lu jusqu'ici. À la prochaine fois !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal