クライアントから、あるモジュールのメソッドの実装に関する仕様書を受け取った。
// getGenres():
// Returns a promise. When it resolves, it returns an array.
ジャンルの配列が与えられた場合。
['comedy', 'drama', 'action']
ここでは、プロミスを使ったスケルトンメソッドを紹介します。
MovieLibrary.getGenres = function() {
var promise = new Promise(function(resolve, reject) {
/* missing implementation */
});
return promise;
};
このプロミスは、ジャンルで見つけたデータを返すようにできますか?スペックの記述を実現するためのより良い方法はありますか?
約束がどのように使われるのか理解していないようですね。 あなたはプロミスを返します。 その後、コードがプロミスを解決するときに、結果を使って解決し、その結果がプロミスに付けられた .then()
ハンドラに渡されます。
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
});
.then()ではなく、await
を使ったバージョンに更新しました。
awaitは、Promiseが解決する(つまり、値を持つ)まで実行を停止します。.then()
を使うのとは違って、約束を返す様々な関数を実行する際に値を await
し続けることができ、実行は次の行に続きます(これを 'direct style と呼びます)。また、.then()を多用するよりも、JavaScriptの他の部分との整合性が取れているため、見た目にも***美しくなります。
// 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()
})()