“Promisification” ist ein lange Wort für eine ganz simple Sache. Es geht eigentlich um die immer gleiche Frage, sobald man das erste Mal in JS eine API Anfrage stellt. Wie krieg ich das Zeug in den globalen Scope?
Man bedient sich ganz einfach damit, die asynchronität zu stoppen und mal ein päuschen einzulegen. Sobald dann Daten da sind werden sie mit return an eine wartende Variable zugewiesen. Wie geht den das? Man wrapped die ganze Anfrage mit einem Promise Objekt. Bei erhalt der Daten übergibt man die erhaltenden Daten in ein resolve()
oder reject()
. Sobald das passiert ist der Promise aufgelösst. Solange ist er sonst im pending Modus.
Hier ein kleines Besipiel:
const api = "https://api.coingecko.com/api/v3/simple/price?ids=Bitcoin%2Cdai%2Csolana&vs_currencies=usd&include_market_cap=true&include_24hr_vol=true";
const obj = await new Promise((resolve, reject) => fetch(api)
.then(res => res.json())
.then(data => resolve(data))
.catch(err => reject(err))
);
console.log('OBJ',obj)
Aber, sollte man es verwenden?
Nein! Es ist ein absolutes Antipattern! https://stackoverflow.com/questions/23803743/what-is-the-explicit-promise-construction-antipattern-and-how-do-i-avoid-it