Promiseクラスが登場する前は、非同期のコードを扱う方法が1つしかありませんでした。それが、_コールバックパターン_です。
コールバックとは、別の関数に引数として渡される関数で、その渡した先の関数で何らかの処理が終わると呼び出されます。そうしたコールバック関数では、最初の引数としてerrorを受け取るという書き方がよく使われます(下の例を見てください)。
function callback(error, arg2, arg3) {}
これと非同期コードには、どんな関係があるのでしょうか?
これまでコールバックは、非同期の処理が終わったあとに、プログラム全体を止めることなく何らかの作業を行うために使われてきました。
fetchProduct(productId, function (error, data) {
if (error) {
// Handle the error
} else {
// Do some work
}
});
上の例で、fetchProduct関数(非同期の関数です)は、2番目の引数としてコールバックを受け取ります。商品のデータを取得したあとに何をするかは、このコールバックが決めます。
この演習の目的は2つあります。
Promiseを返す関数に変えるpromisify関数を実装します。次の例を見てみましょう。function fetchProduct(productId, function(error, data) {
if (error) {
// Handle the error
} else {
// Make something with your data
}
})
const fetchProductAsPromise = promisify(fetchProduct);
// Now you got a function `fetchProductAsPromise`
// that returns a promise
fetchProductAsPromise(productId)
.then((data) => {})
.catch((error) => {});
Promiseメソッドを、それらを使わずに再実装します。all:プロミスの配列を受け取り、_すべて_が解決したときに解決し、_1つ_でも拒否されたときに拒否します。allSettled:プロミスの配列を受け取り、_すべて_が解決または拒否されたときに解決します。race:プロミスの配列を受け取り、_最初_に解決または拒否されたプロミスの値で解決または拒否します。any:プロミスの配列を受け取り、_1つ_が解決したときに解決し、_すべて_が拒否されたときに拒否します。Exercismに登録すれば、37個のコンセプト159個の演習、そして本物の人間によるメンタリングとともに、JavaScriptを学んでマスターできます。すべて無料です。