ex14-03-6
ソース
function countdown(seconds) {
return new Promise(function(onFulfilled, onRejected) {
const timeoutIds = [];
for(let i=seconds; i>=0; i--) {
timeoutIds.push(setTimeout(function() {
if(i===13) {
timeoutIds.forEach(clearTimeout); /* すべてクリア */
return onRejected(new Error(`${i}という数は不吉過ぎます`));
}
if(i>0) console.log(i + '...');
else onFulfilled(console.log("GO!"));
}, (seconds-i)*1000))
}
});
}
function launch() {
return new Promise(function(onFulfilled, onRejected) {
console.log("発射!");
setTimeout(function() {
onFulfilled("周回軌道に乗った!");
}, 2*1000); /* 超速のロケット */
});
}
countdown(15)
.then(launch)
.then(function(msg) { /* 関数launch内のonFulfilledの引数がmsgに渡る */
console.log(msg); // 周回軌道に乗った! (成功した場合)
})
.catch(function(err) {
console.error("管制塔、管制塔。トラブル発生... " + err);
})
/* 実行結果
15...
14...
管制塔、管制塔。トラブル発生... Error: 13という数は不吉過ぎます
*/