モジュール内のメソッドの実装に関するクライアントの仕様があります。
// 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;
};
ジャンルで見つかったデータを返すことを約束できますか?仕様記述を達成するためのより良い方法はありますか?
約束がどのように使われているか理解していないようです。あなたは約束を返します。その後、コードがpromiseを解決するときに、結果で結果が解決され、その結果が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()
を使用する場合とは異なり、promiseを返すさまざまな関数を実行するときにawait
ingの値を保持するだけで、実行は次の行に続きます(これは「ダイレクトスタイル」と呼ばれます)。また、どこでも.then()
よりもJavaScriptの残りの部分と一貫しているので、muchを見ると見やすくなります。
// 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()
})()