DNET_PromiseJavaScript - NetDevInfraWGinOSSConsortium/NetDevInfraWiki GitHub Wiki
- æ»ã
-
JavaScriptã®ã¹ã¬ããåŠç
- Promise (JavaScript)ïŒæ¬ããŒãžïŒ
- async/await (JavaScript)
-
JavaScriptã®ã¹ã¬ããåŠç
æ§é åã³ãŒã«ããã¯
-
Promiseã§ã¯ã³ãŒã«ããã¯ã颿°ã«æž¡ããããã«ã
ã³ãŒã«ããã¯ãä»å±ãããPromiseãªããžã§ã¯ãããªã¿ãŒã³ããã -
ããã«ããã
- ã€ã³ã¿ãŒãã§ã€ã¹ãåŠçã®æžãæ¹ãçµ±äžããããšãã§ãã
- å®è¡ãšå®äºã«é å»¶ãããåŠçãããŸãå ·åã«æ±ãããšãã§ããã
-
ãã®åäœã¯ããã¶ã€ã³ã»ãã¿ãŒã³ããã以äžã®ããã«èª¬æã§ããã
ãéåæé¢æ°ã¯åŒã³åºãå ã®é¢æ°ã«åŒã°ãã蚌ãäºåã«è¿ããŠããã
çµæã¯ãéåæåŠçãçµäºã次第ããã®èšŒãæã£ãŠãã颿°ã«éç¥ãããã -
.NETã®Taskã«è¿ããšèšãã°è¿ããããïŒå³å¯ã«ã¯éããïŒã
- åèïŒ[C#]Taskã¯ã©ã¹ãJavaScriptã®Promiseã£ãœã䜿ã£ãŠã¿ãå®éš - Qiita
https://qiita.com/matarillo/items/40fbdc4223689a1e6c43
- åèïŒ[C#]Taskã¯ã©ã¹ãJavaScriptã®Promiseã£ãœã䜿ã£ãŠã¿ãå®éš - Qiita
-
JavaScriptã§éåæåŠçãé æ¬¡å®è¡ããå Žåã
- åæã¡ãœããäžã§åæã¡ãœãããé çªã«åŒã³åºãã®ã§ã¯ãªãã
- ã³ãŒã«ããã¯ããåã³ã³ãŒã«ããã¯ä»ãéåæã¡ãœãããåŒã³åºãå¿ èŠãããããã
ã³ãŒã«ããã¯ã®ãã¹ããæ·±ããªãã³ãŒããèªã¿é£ããªããšããããšãããã
-
ããããPromiseã䜿çšããããšã§ããã®åé¡ã解決ããããšãã§ããã
ïŒã·ãŒã±ã³ã·ã£ã«ã§ã¯ãªããthenã®ã¡ãœããã»ãã§ãŒã³ã§ã³ãŒã«ããã¯ãæå®ããïŒ
çµã¿èŸŒã¿ã¯ã©ã¹ã
以äžã®ããã«Promiseãªããžã§ã¯ããå©çšããŠéåæåŠçãå®è£ ããã
-
éåæåŠç颿°ã¯Promiseãªããžã§ã¯ããè¿ãããã«å®è£ ããã
-
Promiseãªããžã§ã¯ãã¯ãéåæåŠç颿°ã®äžã§ä»¥äžã®ããã«çæãããã
-
Promiseãªããžã§ã¯ãã®ã³ã³ã¹ãã©ã¯ã¿ã«éåæåŠçã®
ãæ¬äœãšãªãéåæåŠç颿°ããïŒåºæ¬çã«ç¡å颿°ãšããŠïŒæž¡ãã -
ãã®ãæ¬äœãšãªãéåæåŠç颿°ãã¯ã
- æåãšå€±æã®ã³ãŒã«ããã¯ãåãåãã
- ãããŠãajaxãªã©ã®éåæåŠçãå®è¡ããŠã
- çµæãåããŠãthenã¡ãœããã«æž¡ãããã³ãŒã«ããã¯ãå®è¡ããã
æåæïŒæåã®resolveã³ãŒã«ããã¯ãå®è¡ããã
倱ææïŒå€±æã®rejectã³ãŒã«ããã¯ãå®è¡ããã
-
resolve, rejectã³ãŒã«ããã¯ã«å€ãæž¡ããå Žåã
ãã®å€ã¯ãåŸç¶ã®éåæåŠçã«æž¡ãããããã
åŸç¶ã®ãæ¬äœãšãªãéåæåŠç颿°ãã§å©çšã§ããã
-
-
æåã®éåæåŠçãåŒã³åºãã
-
æ»ãå€ã®Promiseãªããžã§ã¯ãã®thenã¡ãœããã«åŒæ°ã«ã
- æåãšå€±æã®ã³ãŒã«ããã¯ãæå®ããã
- æŽã«thenã¡ãœããã§ãã§ãŒã³ããå Žåã
æåãšå€±æã®Promiseãªããžã§ã¯ããè¿ãéåæåŠç颿°ãæå®ããã
-
åè
- Promise.prototype.then() - JavaScript | MDN
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Promise/then
- Promise.prototype.then() - JavaScript | MDN
- åŸæ¥åã³ãŒã«ããã¯ïŒJavaScriptã®ã¹ã¬ããåŠçã®è©²åœç¯ãåç §ïŒ
åŸæ¥åã§ã¯ãéåæåŠçãé æ¬¡å®è¡ããå Žåã
éåæåŠçã«éåæåŠçïŒã³ãŒã«ããã¯ïŒãæž¡ãããã
以äžã®æ§ã«éåæåŠçããã¹ãããããšã«ãªãã
Promiseã䜿çšããã°ã
- thenã
- catchïŒäŸå€ãcatchã以éã®rejectãæ¢ããïŒã®
ã¡ãœããã»ãã§ãŒã³ã§éåæåŠçãé æ¬¡å®è¡ã§ããã
-
é æ¬¡
var promise1 = fetchSomething1(); var promise2 = promise1.then(fetchSomething2); var promise3 = promise2.then(fetchSomething3); var promise4 = promise2.then(fetchSomething4); promise4.then(doSomethingFinally);
-
ã¡ãœããã»ãã§ãŒã³
fetchSomething1() .then(fetchSomething2) .then(fetchSomething3) .then(fetchSomething4) .then(doSomethingFinally);
â» åéåæåŠçïŒfetchSomethingãdoSomethingïŒã¯ã
ãPromiseãªããžã§ã¯ããè¿ãããã«å®è£ ãããŠãããâ» åéåæåŠçã«ãå€ãæž¡ããããã»ãåŠçã远å ããããããå Žåã¯ä»¥äžã®ããã«ããã
.then( function(rtn) { alert(rtn); return fetchSomething2(rtn); }).then(...
-
åè
- Promise.prototype.catch() - JavaScript | MDN
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Promise/catch
- Promise.prototype.catch() - JavaScript | MDN
// éåæåŠç颿°ã¯Promiseãªããžã§ã¯ããè¿ãããã«å®è£
ããã
var fetchSomething1 = function() {
// Promiseãªããžã§ã¯ãã¯ãéåæåŠç颿°ã®äžã§ä»¥äžã®ããã«çæãããã
return new Promise(
// Promiseãªããžã§ã¯ãã®ã³ã³ã¹ãã©ã¯ã¿ã«éåæåŠçã®
// ãæ¬äœãšãªãéåæåŠç颿°ããïŒåºæ¬çã«ç¡å颿°ãšããŠïŒæž¡ãã
// ãã®ãæ¬äœãšãªãéåæåŠç颿°ãã¯ãæåãšå€±æã®ã³ãŒã«ããã¯ãåãåãã
function(resolve, reject) {
// ãããŠãajaxãªã©ã®éåæåŠçãå®è¡ããŠã
// çµæãåããŠãthenã¡ãœããã«æž¡ãããã³ãŒã«ããã¯ãå®è¡ããã
AsynchronousProcessingWrapper({
success: function(data) { // æåããå Žå
// æåã®ã³ãŒã«ããã¯ãå®è¡ããã
resolve('æå1');
},
fail: function() { // 倱æããå Žå
// 倱æã®ã³ãŒã«ããã¯ãå®è¡ããã
reject('倱æ1');
}
});
}
// resolve, rejectã³ãŒã«ããã¯ã«å€ãæž¡ããå Žåã
// ãã®å€ã¯ãåŸç¶ã®éåæåŠçã«æž¡ãããããã
// åŸç¶ã®ãæ¬äœãšãªãéåæåŠç颿°ãã§å©çšã§ããã
);
};
// fetchSomething1 ãšåãã
var fetchSomething2 = function(str) {
return new Promise(function(resolve, reject) {
AsynchronousProcessingWrapper({
success: function(data) { // æåããå Žå
resolve(str + ' æå2');
},
fail: function() { // 倱æããå Žå
reject(str + ' 倱æ2');
}
});
});
};
fetchSomething1().then(function(rtn) {
alert(rtn);
return fetchSomething2(rtn);
}, function(error) {
alert('error:' + error);
return fetchSomething2(error);
}).then(function(rtn) {
alert(rtn);
}, function(error) {
alert('error:' + error);
});https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Promise/then
â» ãããŒéåæé¢æ°ãåé€ããã
â» resolveãrejectã«åãæ¿ãããšåäœã倿Žãããããšãã§ããã
var fetchSomething1 = function() {
return new Promise(function(resolve, reject) {
resolve('æå1');
//reject('倱æ1');
});
};
var fetchSomething2 = function(str) {
return new Promise(function(resolve, reject) {
resolve(str + ' æå2');
//reject(str + ' 倱æ2');
});
};
fetchSomething1().then(function(rtn) {
alert(rtn);
return fetchSomething2(rtn);
}, function(error) {
alert('error:' + error);
return fetchSomething2(error);
}).then(function(rtn) {
alert(rtn);
}, function(error) {
alert('error:' + error);
});-
åæåŠçãšéåæåŠçãèªç¶ã«æ··ããŠèšè¿°ããããšãå¯èœã
-
åæåŠçã¯ãPromiseãªããžã§ã¯ã以å€ãè¿ãã
ãã®å Žåãæ»ãå ã§æ°ããPromiseãªããžã§ã¯ããäœæããã
è¿ããå€ã§ããã«resolve()ãåŒã³åºããããããåŸç¶ã®éåæåŠçã«æž¡ãããšãã§ããã
以äžã§ã䞊ååŠçãå®è£ ã§ããã
- Promise.all() - JavaScript | MDN
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Promise/all
ãã§ãŒã³ã®æåŸã«ã ãã
ã倱æã®Promiseãªããžã§ã¯ããè¿ãéåæåŠç颿°ã
ãèšå®ããã°ãã³ã³ã§ãšã©ãŒããŸãšããŠãã£ããã§ããã
- Promiseã§ã³ãŒã«ããã¯å°çããè§£æŸããã話
https://www.slideshare.net/sotasugiura/slide-43304678 - Promiseã«ããéåæåŠçã®æžãæ¹ - 30æ³ããã®ããã°ã©ãã³ã°
http://numb86-tech.hatenablog.com/entry/2017/01/02/152517
-
JavaScript
-
仿Žã ãã©Promiseå ¥é
https://qiita.com/koki_cheese/items/c559da338a3d307c9d88 -
Promiseã«ã€ããŠ0ããå匷ããŠã¿ã
https://qiita.com/toshihirock/items/e49b66f8685a8510bd76 -
Promiseã®polyfill(IE11ãåãã!) - Qiita
https://qiita.com/zERobYTezERo/items/ac458c4cf2a8f2f6c3dd -
Promiseåå ¥é > â
Promiseåºæ¬ç·š
https://qiita.com/gctfuji/items/1dfe4265c36bea903ab3 -
jQuery DeferredãŸãšã
https://qiita.com/hththt/items/9f193fc10b79cdeea903
-
é£èŒ | ECMAScript 2015ïŒECMAScript 6ïŒç¹é
https://html5experts.jp/series/ecma2015/-
Promiseã§ç°¡åïŒJavaScriptéåæåŠçå ¥é
-
ãåç·šã
https://html5experts.jp/takazudo/17107/ -
ãåŸç·šã
https://html5experts.jp/takazudo/17113/
-
-
-
future - Wikipedia
https://ja.wikipedia.org/wiki/Future -
Promise/Deferred ãã¿ãŒã³ - 鿬¡éЬãšã³ãžãã¢é
http://notta55.hatenablog.com/entry/2014/09/20/144054 -
éåæåŠçãšPromiseïŒDeferredïŒãèæ¯ããçè§£ããã - hifive
https://www.htmlhifive.com/conts/web/view/study-room/async-programming-with-deferred
ç§»è¡ã¡ã¢
- ãæ»ããã®äžŠã³ã«ãããPromise (JavaScript)ãã¯èªããŒãžã®ããã ãã®æšãè£ã£ãŠãã¬ãŒã³ã»ããã¹ããšããã
- PukiWiki ã®ããŒãžå ã¢ã³ã«ïŒ
#xxxxxxxxïŒã¯ GitHub Wiki ã§ã¯åçŸã§ããªãããã åäžããŒãžå ã®ã¢ã³ã«ã¯èŠåºãããçæãããã¢ã³ã«ã«åŒµãæ¿ãã ä»ããŒãžã®ã¢ã³ã«ãæããªã³ã¯ã¯ããïŒããŒãžåã®è©²åœç¯ãåç §ïŒãã®åœ¢ã«çœ®ãæããã- å Wiki ã®è¡é 空çœã«ãããã¬ãã©ãŒãããã»ãããã¯ã¯ã ãã§ã³ã¹ä»ãã³ãŒããããã¯ã«ããã
Tags: ç§»è¡, JavaScript, Promise, éåæåŠç, ã³ãŒã«ããã¯å°ç, then, catch, Promise.all, Deferred