Saya memiliki spesifikasi dari klien untuk implementasi sebuah metode dalam sebuah modul:
// getGenres():
// Returns a promise. When it resolves, it returns an array.
Jika diberikan sebuah array genre,
['comedy', 'drama', 'action']
Berikut ini adalah metode kerangka dengan sebuah janji:
MovieLibrary.getGenres = function() {
var promise = new Promise(function(resolve, reject) {
/* missing implementation */
});
return promise;
};
Dapatkah janji dibuat untuk mengembalikan data yang ditemukan dalam genre? Apakah ada cara yang lebih baik untuk mencapai deskripsi spesifikasi?
Kedengarannya seperti Anda tidak memahami bagaimana janji digunakan. Anda mengembalikan sebuah janji. Kemudian, nanti ketika kode Anda menyelesaikan promise, kode tersebut menyelesaikannya dengan sebuah hasil dan hasil tersebut diteruskan ke .then()
handler yang melekat pada promise:
MovieLibrary.getGenres = function() {
var promise = new Promise(function(resolve, reject) {
/* missing implementation */
resolve(result);
});
return promise;
};
MovieLibrary.getGenres().then(function(result) {
// you can access the result from the promise here
});
Versi terbaru menggunakan await
daripada .then()
.
await
berhenti mengeksekusi sampai Promise telah diselesaikan (yaitu, memiliki nilai). Tidak seperti menggunakan .then()
Anda bisa terus await
ing nilai saat Anda menjalankan berbagai fungsi yang mengembalikan janji, dan eksekusi berlanjut ke baris berikutnya (ini disebut ' gaya langsung). Hal ini juga jauh lebih bagus untuk dilihat, karena konsisten dengan JavaScript lainnya, daripada .then()
di mana-mana.
// Example function that returns a Promise that will resolve after 2 seconds
var getGenres = function() {
return new Promise(function(resolve) {
setTimeout(function(){
resolve(['comedy', 'drama', 'action'])
}, 2000);
});
}
// We start an 'async' function to use the 'await' keyword
(async function(){
var result = await getGenres()
console.log('Woo done!', result)
// But the best part is, we can just keep awaiting different stuff, without ugly .then()s
var somethingElse = await getSomethingElse()
var moreThings = await getMoreThings()
})()