Heim > Web-Frontend > js-Tutorial > Hauptteil

Wissenswertes über Javascript-Versprechen

Susan Sarandon
Freigeben: 2024-10-07 20:21:30
Original
188 Leute haben es durchsucht

fun facts about Javascript Promises

Versprechen sind immer asynchron

Der Rückruf von Promise wird immer nach synchronem Code ausgeführt


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

//sync
//async


Nach dem Login kopieren

Verkettete Versprechen geben neue Versprechen zurück

Promise gibt dann bei jedem Aufruf ein neues Versprechen zurück


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


Nach dem Login kopieren

Für immer dann()

Promises unterstützen unendliche Verkettung


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


Nach dem Login kopieren

Sie können Rückrufe in Versprechen umwandeln

Sie können älteren Code, der Callback verwendet, in das Versprechen einschließen, mit modernem Async/Await zu funktionieren


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"


Nach dem Login kopieren

Promise.resolve() erstellt nicht immer ein neues Versprechen

Wenn Sie einen Nicht-Promise-Wert übergeben, verpackt Promise.resolve() ihn in ein aufgelöstes Versprechen. Aber wenn Sie ein Versprechen bestehen, gibt es einfach dasselbe Versprechen zurück.


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


Nach dem Login kopieren

Sie können Fehler überall in der Kette behandeln


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'));


Nach dem Login kopieren

„final()“ übergibt keine Werte

Die Methode „final()“ empfängt oder ändert keine aufgelösten Werte. Es wird zum Bereinigen von Ressourcen verwendet und wird unabhängig davon ausgeführt, ob das Versprechen aufgelöst oder abgelehnt wird.


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

//resolved
//cleanup


Nach dem Login kopieren

Versprechen sind unveränderlich, sobald sie erfüllt sind

Sobald ein Versprechen erfüllt (gelöst oder abgelehnt) ist, ist sein Zustand unveränderlich. Danach kann es nicht mehr geändert werden, auch wenn Sie erneut versuchen, es zu lösen/ablehnen.


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


Nach dem Login kopieren

Sie können Catch() verketten, um bestimmte Fehler zu behandeln


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;
  })


Nach dem Login kopieren

Sie können „await“ mit nicht versprechenden Werten verwenden


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


Nach dem Login kopieren

Das ist es! Vielen Dank, dass Sie bis hierher gelesen haben. Bis zum nächsten Mal!

Das obige ist der detaillierte Inhalt vonWissenswertes über Javascript-Versprechen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage