Mam specyfikację od klienta dotyczącą implementacji metody w module:
// getGenres():
// Returns a promise. When it resolves, it returns an array.
Jeśli podano szereg gatunków,
['comedy', 'drama', 'action']
Oto szkieletowa metoda z obietnicą:
MovieLibrary.getGenres = function() {
var promise = new Promise(function(resolve, reject) {
/* missing implementation */
});
return promise;
};
Czy można złożyć obietnicę zwrotu danych znalezionych w gatunkach? Czy istnieje lepszy sposób na uzyskanie opisu specyfikacji?
javascript
sealocal
źródło
źródło
resolve([genre1, genre2, ...]);
w ramach realizacji obietnicy.Odpowiedzi:
Wygląda na to, że nie rozumiesz, w jaki sposób wykorzystywane są obietnice. Zwracasz obietnicę. Następnie, gdy Twój kod rozwiązuje obietnicę, rozwiązuje ją z wynikiem i ten wynik jest przekazywany do modułu
.then()
obsługi dołączonego do obietnicy:źródło
Zaktualizowana wersja za pomocą
await
zamiast.then()
.await
przestaje działać, dopóki obietnica nie zostanie rozwiązana (tzn. ma wartość). W przeciwieństwie do używania.then()
, możesz zachowaćawait
wartości podczas uruchamiania różnych funkcji, które zwracają obietnice, a wykonywanie jest kontynuowane w następnym wierszu (jest to nazywane „stylem bezpośrednim”). Jest też o wiele ładniej wyglądać, ponieważ jest zgodny z resztą JavaScript, niż.then()
wszędzie.Oczekiwanie jest obsługiwane we wszystkich obecnych przeglądarkach i węźle
źródło