ãJavaScriptãåå¿è ã«ããããPromiseã®äœ¿ãæ¹
JavaScriptã®Promiseãèããããšã¯ããã§ããããïŒ éåæåŠçãè¡ããšãã«äœ¿ãã»ã»ã»ãããã®ããšã¯èãã人ããããããããŸããã ãã®èšäºã§ã¯JavaScriptã®Promiseã䜿ã£ãäœãã§ããããããµã³ãã«ã³ãŒãã䜿ããªãã解説ããŸããJavaScriptã®Promiseãšã¯äœãªã®ãããéåæåŠçãšã³ãŒã«ããã¯ã亀ããŠè§£èª¬ããŸãã
ãŸããµã³ãã«ã³ãŒãã䜿ã£ãŠãPromiseãåç¬ããã³ãã§ã€ã³ã§å®è¡ããæ¹æ³ãããåæã«è€æ°ã®éåæåŠçãå®è¡ããæ¹æ³ãŸã§è§£èª¬ãè¡ããŸãã
æåŸã«ãšã©ãŒãã³ããªã³ã°ã«ã€ããŠããç°¡åã«èª¬æããŸãã
Promiseãšã¯
Promiseãšã¯JavaScriptã«ãããŠãéåæåŠçã®æäœãå®äºãããšãã«çµæãè¿ããã®ã§ãã
éåæåŠçãšã¯ãããåŠçãå®è¡ãããŠããçµãããŸã§åŸ
ããã«ãæ¬¡ã«æ§ããŠããå¥ã®åŠçãè¡ãããšã§ãã
ãªããã®ãããªä»çµã¿ãããã®ã§ããããïŒ
JavaScriptã¯ã·ã³ã°ã«ã¹ã¬ããã§ããåããªãæ§è³ªããããããè€æ°ã®åŠçã䞊åã§èµ°ãããããšãã§ããŸããã
ãã®ããå¹ççã«åŠçãããããã«èããããä»çµã¿ãéåæåŠçãšåŒã°ãããã®ã§ãã
éåæåŠçãšã¯
å ã»ã©ãå°ãè§ŠããŸããããéåæåŠçãšã¯ãããåŠçãå®è¡ãããŠããçµãããŸã§åŸ ããã«ãæ¬¡ã«æ§ããŠããå¥ã®åŠçãè¡ãããšãã§ãã
ã§ã¯çµãããªãåŠçã®çµæã¯ãã©ãååŸããã®ã§ããããïŒ
Promiseã¯åŠçãå®è¡äžã®åŠçãç£èŠããåŠçãåé¡ãªãå®äºããã°resolveãå察ã«åé¡ãããã°rejectãåŒã³åºããŠã¡ãã»ãŒãžã衚瀺ããŸãã
ãã®èŸºãã¯å®éã®ã³ãŒããã¿ãŠãåããã€ã¡ãŒãžããã»ããçè§£ããããã§ãããã
ã³ãŒã«ããã¯ãšã¯
ã³ãŒã«ããã¯ãšã¯ããã颿°ãžå¥ã®é¢æ°ãæž¡ãããšã§ãã
以äžã®ãããªã€ã¡ãŒãžã®å Žåã颿°Bãã³ãŒã«ããã¯é¢æ°ã«ãªããŸãã
颿°A(颿°BãåŒæ°) {
//å®è¡å
容
}
ã³ãŒã«ããã¯ã¯äœ¿ãåæãããåé¢ã䜿ãããããšã³ãŒããéåžžã«èªã¿ã«ãããªãæ¬ ç¹ããããŸãããŸã颿°ãã颿°ãåŒã¶åŠçãç¹°ãè¿ãããããšãããšã§åé¡ãçºçãããšãã«èª¿ã¹ãããšãæéã«ãªããã¡ã§ãããããã³ãŒã«ããã¯é¢æ°å°çãšèšããŸãã
éåæåŠçã®ã³ãŒã«ããã¯äŸ
sampleFunction1(function(data1) {
sampleFunction2(function(data2) {
sampleFunction3(function(data3) {
sampleFunction4(function(data4) {
//åŠç
});
});
});
});
JavaScriptã«ãããéåæåŠçã®ã³ãŒã«ããã¯é¢æ°å°çã¯ãã¹ããæ·±ããªãäžã«ããšã©ãŒåŠçãçžãŸã£ãŠãå¯èªæ§ãèããäžããåŸåããããŸãããã®ã³ãŒã«ããã¯å°çãé¿ããããã«èããããã®ä»çµã¿ããPromiseã§ãã
ã³ãŒã«ããã¯é¢æ°ã®æ±ãã«æ £ããŠããªããšãã¯ããããããçµéšè±å¯ãªããã©ã³ã®æ¹ã«èšèšæç¹ã§åé¡ãç¡ãããèããŠã¿ãã»ããè¯ãã§ãããã
Promiseã®äœ¿ãæ¹
ããã§ã¯ãµã³ãã«ã³ãŒãã䜿ã£ãŠãPromiseã®äœ¿ãæ¹ã解説ããŠãããŸãã
åºæ¬çãªæžãæ¹
Promiseã®åºæ¬çãªæžãæ¹ã¯ã以äžã®ããã«ãªããŸãã
new Promise(function(resolve, reject) {
resolve('æå');
});
new Promise(function(resolve, reject) {
reject('倱æ');
});
Promiseã¯resolveãšrejectããµãã€ã®é¢æ°ãåŒæ°ã«åããŸãã
resolveïŒåŠçãæåãããšãã®ã¡ãã»ãŒãžã衚瀺ãã颿°
rejectïŒåŠçã倱æãããšãã®ã¡ãã»ãŒãžã衚瀺ãã颿°
ãšãã£ã圢ã§äœ¿ãããŸãã
try catchãæãæµ®ãã¹ãŠããããã°ãã€ã¡ãŒãžãæ¹§ãããããããããŸããã
thenã䜿ã£ãŠã³ãŒã«ããã¯åŠçãå®è¡ãã
ã§ã¯æ¬¡ã«Promiseã®thenã䜿ã£ãŠãã³ãŒã«ããã¯åŠçãå®è¡ããŠã¿ãŸãããã
次ã®ããã«æžããŸãã
var sample = new Promise(function(resolve, reject) {
setTimeout(function() {
resolve();
}, 1000);
});
sample.then(function(value) {
console.log("Promiseæå!");
});
console.log("å
ã«åºå");
thenã䜿ã£ãŠã³ãŒã«ããã¯é¢æ°ãå®è¡ããæžãæ¹ã¯ããããè€éã§ãã
promise.thenãå®è¡ãããšãåŠçããçµæã®"PromiseæåïŒ"ãšããæååãresultã«åŒãæž¡ãããŸãããã®ããconsole.logã§resultã衚瀺ãããšã"PromiseæåïŒ"ãšããæåãã³ã³ãœãŒã«äžã«è¡šç€ºãããŸãã
ãããŠãµã³ãã«ã³ãŒãã®å®è¡çµæã«æ³šç®ããŠãã ãããconsole.log(result)ã®ããšã«console.log(âå ã«åºåâ)ãå®è¡ããŠããã«ãé¢ããããâå ã«åºåâãšããã¡ãã»ãŒãžãâPromiseæåïŒâãããå ã«åºåãããŠããŸãã
ãããéåæåŠçãšåŒã°ãããã®ã§ãæéããããåŠçãå®äºããåã«æ¬¡ã«æ§ããŠããå¥ã®åŠçãå®è¡ãããŠããæ§åãããããŸãã
ãã§ã€ã³ã䜿ã£ãåŠçã®ããæ¹
次ã¯ãã§ã€ã³ã®äœ¿ãæ¹ã説æããŸãã
ãã§ã€ã³ã䜿ãããšã§ãè€æ°ã®åŠçãé£çµãããããšãã§ããããã«ãªããŸãã
æåã®åŠçãæåããå Žåã¯æ¬¡ã®åŠçã«èªåçã«ç§»ããç¹°ãè¿ãããšã§ãããè€éã§é«åºŠãªåŠçãã³ãŒãã£ã³ã°ã§ããããã«ãªããŸãã
Promiseã®åŠçãé£çµãããæ¹æ³
ãã§ã€ã³ã䜿ã£ãŠåŠçãé£çµãããäŸã以äžã³ãŒãã«ãªããŸãã
ã³ãŒãã®äžèº«ã¯ãgetNumber颿°ã¯æž¡ãããæ°ånumãåãåããnumã«å¯ŸããŠ3ã2åå ç®ãããšãããã®ã§ãã
.thenã3åé£ç¶ã§äœ¿çšããŠããç®æããããŸãããããããã§ã€ã³ãšåŒã°ãããã®ã§ãããã®ããã«ãPromiseã§ã¯è€æ°ã®åŠçãé£ç¶ã§åŠçãããããšãå¯èœã§ãã
function getNumber(num) {
return new Promise(function(resolve, reject) {
// numã3以äžãªãnumãè¿ãã3æªæºãªã"Falied!"ã®ã¡ãã»ãŒãžãè¿ã
if (num >= 3) {
setTimeout(function() {
resolve(num);
}, 1000);
} else {
reject("Falied!");
}
});
}
// ä»åã¯3ãæž¡ããŠããã®ã§ãresolveãã3ãè¿ã£ãŠãã
getNumber(3).then(function(result) {
console.log(result);
//numã«3ãå ç®ããŠãgetNumberã«è¿ããŠãã
return result + 3;
}).then(function(result) {
//äžãšåãåŠçã®ç¹°ãè¿ããããããã§ã€ã³
console.log(result);
return result + 3;
}).then(function(result) {
// æçµçµæãšããŠãnumã«6ãå ç®ããæ°ã衚瀺
console.log(result);
}, function(err){
// 3æªæºã®å Žåã¯rejectãåŒã³åºããã"Falied!"ã®ã¡ãã»ãŒãžã衚瀺ããã
console.log(err);
});
allã䜿ã£ãŠè€æ°ã®éåæåŠçãåæã«è¡ã
allã䜿ãããšã§ãè€æ°ã®éåæåŠçãåæã«å®è¡ããããšãã§ããŸãã
æžãæ¹ã¯ä»¥äžã®éãã§ãã
Promise.all(iterable).then(function(message) {
// çµæã衚瀺ããåŠç
}
ãŸããµã³ãã«ã³ãŒãã¯ä»¥äžã®éãã§ãã
// promise1, 2, 3ãå¥åäœæãã
var promise1 = new Promise(function(resolve, reject) {
setTimeout(function() {
resolve();
}, 300);
});
var promise2 = new Promise(function(resolve, reject) {
setTimeout(function() {
resolve();
}, 1000);
});
var promise3 = new Promise(function(resolve, reject) {
setTimeout(function() {
resolve();
}, 500);
});
// Promise.allã䜿ã£ãŠã3ã€ã®promiseãåæã«å®è¡ããŠãã
Promise.all([promise1, promise2, promise3]).then(function() {
console.log("Fourth");
});
console.log("First");
setTimeout(function(){
console.log("Third");
}, 600);
console.log("Second");
allã¯ãã¹ãŠã®éåæåŠçãresolveãããã¿ã€ãã³ã°ã§çµæãè¿ããŸãã
äžã®ãµã³ãã«ã®äŸã§ããšãpromise1ã¯300msåŸ, promise3ã¯500msåŸã«åŠçãããããšã«ãªã£ãŠããŸããã1000msåŸã«resolveãããpromise2ãå®äºããã¿ã€ãã³ã°ã§çµæãè¿ããŸãã
ã§ãã®ã§äžã®ãµã³ãã«ã³ãŒãã¯
- console.log("First");
- console.log("Second");
- setTimeout(function(){console.log("Third")}, 600);
- Promise.all([promise1, promise2, promise3])~
ã®é çªã§çµæãè¿ããŠããããšãããããŸãã
catchã䜿ã£ããšã©ãŒãã³ããªã³ã°ã®ããæ¹
ãšã©ãŒãã³ããªã³ã°ãè¡ãããã«å¿ èŠã§ãããcatchã®äœ¿ãæ¹ã説æããŸãã
catchã䜿ãããšã§ããã§ã€ã³ãå®è¡ããŠããæäžã«ãšã©ãŒãçºçããŠããšã©ãŒãæãŸããããšãã§ããŸãã
äžã®ã³ãŒãã§ã¯2ã€ç®ã®ãã§ã€ã³ã«å ¥ã£ã段éã§ãšã©ãŒãçºçãããŠããã®ã§ã3ãå ç®ããçµæã§ããã6ããè¿ãåã«ãšã©ãŒã¡ãã»ãŒãžã衚瀺ãããŸãã
function getNumber(num) {
return new Promise(function(resolve, reject) {
if (num >= 3) {
setTimeout(function() {
resolve(num);
}, 500);
} else {
reject("Falied!");
}
});
}
// ä»åã¯3ãæž¡ããŠããã®ã§ãresolveãã3ãè¿ã£ãŠãã
getNumber(3).then(function(result) {
console.log(result);
return result + 3;
}).then(function(result) {
// 2ã€ç®ã®åŠçã§ãšã©ãŒãçºçããã
throw new Error('ãšã©ãŒïŒå€±æããŸãã');
console.log(result);
return result + 3;
}).then(function(result) {
console.log(result);
// catchã䜿ãããšã§ããšã©ãŒãçºçããæç¹ã§ãšã©ãŒã¡ãã»ãŒãžãè¿ã
}).catch(function(e) {
console.log('error: ', e);
});
ãŸãšã
ãããã ã£ãã§ããããïŒ
æ¬èšäºã§ç޹ä»ããPromiseããããããããšã以äžã®ããã«ãªããŸãã
- Promiseã¯åŠçãæåããã°resolveãè¿ãã倱æãªãrejectãè¿ã
- Promiseã䜿ããšããã¹ããæ·±ãããã«éåæåŠçã®ã³ãŒã«ããã¯é¢æ°ãæžãã
- ãã§ã€ã³ã䜿ãããšã§ãè€æ°ã®åŠçãé£ç¶ããŠåŠçã§ããããã«ãªã
- allã¯ãã¹ãŠã®éåæåŠçãå®äºããæç¹ã§ãresolveãè¿ã
- catchã䜿ãããšã©ãŒãçºçããæç¹ã§ãšã©ãŒãè¿ãããã«ã§ãã
ãããã®ç¹æ§ãããéåæåŠçæã¯Promiseã䜿ãããã«ãããšãã³ãŒãèšè¿°æã«ãã¹ããšã©ãŒãçºçããå¯èœæ§ãæžããããšãã§ããŸãã













