非同期処理の最終的な完了、失敗を表すオブジェクトです?
さっぱり解らん。
非同期処理関数A()の戻値yield aを使って処理B(), 処理C()を行う場合、次のような処理となる。
A(function(a){
B(a, function(b) {
C(b, function(c) {
done(c)
})
})
})これが、Promiseを使うと
A().then(B).then(C).then(done); // ABCPromiseを使うとは?どういう事?
Promiseインスタンスの生成1
let myFirstPromise = new Promise((resolve, reject) => {
setTimeout(function(){
resolve("Success!"); // Yay! Everything went well!
}, 250);
});
// Promiseのインスタンスの使い方
myFirstPromise.then((successMessage) => {
// successMessage is whatever we passed in the resolve(...) function above.
// It doesn't have to be a string, but if it is only a succeed message, it probably will be.
console.log("Yay! " + successMessage);
});Promiseインスタンスの生成2 引数付きのfs.readFile(file)関数(同期関数)を非同期関数へ変換
fs = require('fs');
function readFileAsync(file) {
return new Promise(function(resolve, reject){
fs.readFile(file, function(err, data){
if (err) {
reject(err); // errがあればrejectを呼び出す
return;
}
resolve(data); // errがなければ成功とみなしresolveを呼び出す
});
});
}
// 非同期関数の使い方
readFileAsync(module.filename)
.then(function(data){ console.log(data.toString('utf8')); });asynce function sample() { … }でsampleは非同期関数になる。{ … }内に非同期関数の呼び出しがあった場合、awaitを{ … }内に記述する事で、関数呼び出しが同期実行される様になる。
うぅーん。何の役に立つのか?
awaitの記述は、連続した非同期処理の記述に必須。
- 同期処理を非同期処理に変換してくれる、魔法ではない。
- あくまで、非同期処理の書き方を変換するための仕組みがPromiseである。callback hellをmethod chainへ変換できる。