ïŒ1699ã®ãã£ã¹ã«ãã·ã§ã³ãåç §ããŠãã ãã
Promise.allïŒïŒã䜿çšããŠããã¹ãŠã®ããŒã¿ããŒã¹äœæ¥ãå®äºããåŸã«äœããå®è¡ã§ããããšãæ¬åœã«æ¥œãã¿ã«ããŠããŸãã
ïŒ+1ïŒ
https://github.com/LearnBoost/mongoose/issues/1699ã§ããŸãæ確ã§ã¯ãªãã£ãããšã®1ã€ã¯ãã©ã®å®è£ ãããã©ã«ãã«ãªãããšããããšã§ãã
éæ¹åã®ãªãªãŒã¹ã§ã¯ãªãããšãèãããšãmpromiseãããã©ã«ãã«ããå¿ èŠããããŸããããªãŒããŒã©ã€ãããããšã¯ã§ããŸãã
+1
ïŒ+1ïŒ
ããããããã³ã°ãããŠãããã©ã³ãã¯ãããŸããïŒ ç§ã¯mpromiseã§ãšã©ãŒåŠçãããŒã«èããããããœãŒã¹ãã¯ã©ãã¯ããŠéããŠããããäœããããã確èªããããšããŠããŸãã
mpromiseïŒ
query.exec()
.then(function(ou) {
if(!ou) {
return next(new errors.http.NotFound('The specified OU was either not found, or your credentials lack the required permissions to view it.'));
}
res.send(ou);
}, next)
.end(next);
æåŠãåŠçããããã«end
é
眮ããå¿
èŠããããŸãã end
ããªããšãäŸå€ïŒããšãã°ãNotFoundã¯ã©ã¹ã®ã¹ãã«ãééããïŒã¯é»ã£ãŠé£²ã¿èŸŒãŸããã¹ããŒã«ã ããè¡šçŸããŸãã
éãé³¥ïŒ
query.exec()
.then(function(ou) {
if(!ou) {
return next(new errors.http.NotFound('The specified OU was either not found, or your credentials lack the required permissions to view it.'));
}
res.send(ou);
})
.catch(next);
promisifyAll(require('mongoose'))
ãå®è¡ãããšããããŸã§ã®ãšãããå®éã«ã¯ãŸã Mongoose4ã§æ©èœããŠããããã§ãã ãããã«ããŒããååž°ãã¹ãã¯ããŸãã«ãã¿ãŒã²ããã«ãããŸããïŒ
çŸæç¹ã§ã¯ãªãã ã»ãšãã©ã®äœæ¥ã¯ãïŒ2754ããã³vkarpov15 / kareemïŒ2ã«åŸã£ãŠã kareemã¢ãžã¥ãŒã«ã§è¡ãããŸããããã«ããã1ã€ã®ç³ã§2矜ã®é³¥ã殺ããããã¯ãšçŽæãäœæããããã«äœæãããéåžžã«åä»ãªãã€ã³ãã«ããã®ãã³ã»ã³ã¹ãåé€ã§ããŸããå ±ã«åãã ã§ããæ°è»œã«è©ŠããŠã¿ãŠãã ãããç§ã¯PRãåãå ¥ããŠããŸãã
ãããããªãä»ã®Promiseã©ã€ãã©ãªã®ãµããŒããç¶æããå¿ èŠãããã®ã§ããããã ES6 Promisesã®ä»æ§ã¯ä»ãå å®ã§ãããããã«ãšã©ãŸããŸãã å€ãããŒãžã§ã³ã®ããŒãã§äœ¿çšã§ããªããšãã«ããªãã£ã«ãããŒãããããçŽç²ãªES6 Promisesã䜿çšããããšã¯ã§ããŸãããïŒ
ãããããªããç§ã¯ãããè©Šãããšãã§ããŸãã
éèŠãªã®ã¯ãES6äºæã®Promiseã©ã€ãã©ãªã奜ããªããã«äœ¿çšã§ãããšããããšã§ãã å€ãã®äººã ã¯ãqãrsvpãªã©ã®å ŽåããŸã ãã«ãŒããŒãã«å€é¡ã®æè³ãè¡ã£ãŠããããããã®ã©ã€ãã©ãªã®ããããã«ã¯ãäžè¬çãªããªãã£ã«ã§ã¯æããããªãç¬èªã®çããããŸãã
ç§ã¯å¥ã®ææ¡ãåãå ¥ããŠããŸã-ç§ã¯ç¹ã«çŽæã奜ãã§ã¯ãªãã䜿çšããŠããŸããããã®æ©èœã¯ãããã«ãŒããŒãæ©èœXãmpromiseã§ãµããŒãããããŸãã¯ããã€ãã£ãrsvp.jsãµããŒãããæ±ãã人ã ãé¢äžããåé¡ãå±±ã»ã©ãããšããäºå®ã«ãã£ãŠåæ©ä»ããããŠããŸãããããŠã人ã ã«èªåã®çŽæã®ã©ã€ãã©ãªãããŒãã£ãŒã«æã£ãŠæ¥ãããããšã¯ããããã®åé¡ã解決ããæãç°¡åãªæ¹æ³ã§ãã
æå³ãããããŸãã ç§ã¯Promisesã®ããã°ãŠãŒã¶ãŒã§ãããµããŒã¿ãŒã§ãã åºæºã匷å¶ããããšãèããã¹ãã ãšæããŸãã
ES6ã®é Œãã«ãªããã®ãšããŠA+ãããã¹ãéžã°ããŸããã ES6ãšäºææ§ã®ãªãããŒãããŒãžã§ã³ã確å®ã«ãµããŒãããããã«ãããªãã£ã«ãææ¡ããŸããïŒäŸïŒhttpsïŒ//github.com/jakearchibald/es6-promiseïŒã
ES6ã®Promiseãšäºææ§ããããæ··åå¯èœã§ããããã«ã¯ãä»ã®Promiseã©ã€ãã©ãªã®æã«ããå¿ èŠããããŸãã
ç·šéïŒ
ãããŠãçŸåšã®APIã«åé¡ã¯ãããŸãããããããšãäœãã足ããŸãããïŒ
Promises / A +ã®ä»æ§ã¯ãES6ã®Promiseã®ä»æ§ãšã¯å€§ããç°ãªããŸããããã¯ãåã®ã³ã¡ã³ãã§ãªã¹ãããPromiseã©ã€ãã©ãªãšã¯ç°ãªããŸãã ç¡æ°ã®Promiseã©ã€ãã©ãªããã¹ãŠES6ã«çµ±åãããŠããã°è¯ãã®ã§ããããªãŒãã³ãœãŒã¹ã®çŸããã¯ãPromiseãæããäžéšã®äººã ãè¿œå æ©èœãå¿ èŠãšããç¬èªã®Promiseãäœæããããšã§ããããããããå®çŸãããã©ããã¯çåã§ããã©ã€ãã©ãªã
çŸåšã®APIã«é倧ãªå€æŽã¯ãããŸãããç§ãèããŠããã®ã¯ã mongoose.set('Promise', require('bluebird'));
ãªã©ã®èšãæ¹ãªã®ã§ããªããã€ã³ã«ãªããããã©ã«ãã¯mpromiseã«ãªããŸãã
ããããããã®ééãã§ããããªããã
çŸåšã®å®è£
ãšä»ã®promiseã©ã€ãã©ãªã確èªããŸããã
ç§ã¯ãã®ãããªäœåãäœãããšãã§ãããšæããŸãïŒ
mongoose.set('Promise', Promise);
mongoose.set('Promise', require('bluebird'));
mongoose.set('Promise', require('q').defer());
mongoose.set('Promise', require('when').defer());
// and so on...
ãããã£ãŠãåºæ¬çã«ã¯ã resolve
ïŒ$ã¡ãœãããšreject
ã¡ãœãããæã€promiseofchoiceãªããžã§ã¯ããMongooseã«å
¬éããå¿
èŠããããŸãã
ããã¯ããªããèããŠãããã®ã§ããããïŒ ãããããªããç§ã¯ãã«ãªã¯ãšã¹ãã«åãçµã¿ãŸãã
ç·šéïŒ
mongoose.set('Promise', Promise);
ãæžãã®ã¯éåžžã«ã°ãããŠããŸãã ES6ãããã©ã«ãã§ãããéžæããã©ã€ãã©ãªã䜿çšã§ããå¯èœæ§ããããšæããŸãïŒES6 Promisesãå©çšã§ããªãå Žåã¯ãã€ã§ã劥åããŸãïŒã
確ãã«ãç§ã¯ããªãã®å©ãã«æè¬ããŸãã ããªãããŒãªç¹ã¯ã1ïŒããã¯ã§åäœãããããšã§ããvkarpov15/ kareemïŒ2ãåç §ããŠãã ããã2ïŒmpromiseãšã®äžäœäºææ§ã確ä¿ããŸãã
ãŸããreïŒQãES6ä»æ§ã«æãè¿ãQæ§æã§ããããã require('q').Promise
ã䜿çšããŸã
ãå ¥åããã ãããããšãããããŸããããã«åãçµã¿ãŸãã 競åãããã«ãªã¯ãšã¹ããšç¶ç¶çãªPRã®ã©ã¡ãã奜ãã§ããïŒ
å®äºããæ¹ãè¯ãã§ãããç§ã¯åžžã«ããã€ãã®ææ¡ããããŸãã è¡ãè©°ãŸã£ããæããŠãã ãã
ãã®æ©èœã®+1ã ãã«ãŒããŒããšäžç·ã«äœ¿ããã
ææ¬çãªããšã«ã€ããŠã¯ç³ãèš³ãããŸããããå¥ã®ã¢ãããŒãã¯ãpromiseãµããŒããå®å
šã«å»æ¢ããããšã§ãã ããã¯ä»ã®å³æžé€šã®æ¯æŽãæ±ããçŽæã䜿ã£ãŠãã人ãé»ãããã§ãããã
bluebirdã®ãããªåŒ·åãªpromiseã©ã€ãã©ãªã䜿çšããŠãã人ã¯ãã³ãŒã«ããã¯APIãå
¬éããbluebirdã¯ããã0ã®ã³ã¹ãã§ç°¡åã«ã©ããã§ããããããšã«ããããã䜿ãç¶ããããšãã§ããŸãããšã«ããæåã§ãããããµããŒãããããšã¯ããé
ããªãããããšã©ãŒãçºçãããããªããŸãã
@benjamingr 100ïŒ åæããŸããã iojsãšNodeJãNode3.0ã«ããŒãžããããšãES6PromisesãšGeneratorsããµããŒããããããã«ãªããŸãã
ãµããŒããåé€ãããšãå€§å¹ ã«åŸéããŸãã
ã€ãŸãã Promise.promisifyAll(require("mongoose"))
ã¯ãMongooseã®é«éãªïŒæåã§ã®è©Šè¡ãããé«éãªïŒã©ãããŒãäœæããŸããããã¯ãæšæºã«æºæ ããŠãããäœãããªããŠããã¹ãŠã®APIãå²ã¿ãŸãã å®éããšã¯ã¹ããŒããªããžã§ã¯ãã«å¯ŸããŠPromise.promisifyAll
ãèªåã§å®è¡ããbluebirdpromiseãšdualpromiseã¡ãœãã(save - saveAsync)
ãç¡æã§å
¬éããŠãããå®éã®äœæ¥ãè¡ããªããŠãbluebirdpromiseã€ã³ã¿ãŒãã§ãŒã¹ãå
¬éãããšèšãããšãã§ããŸãã
ãããã£ãŠãç§ã¯bluebird promisesã䜿çšããŠããŸããããã®ãã¹ãŠã¯ã2ã€ã®ã€ã³ã¿ãŒãã§ã€ã¹ã«ã³ãŒãã£ã³ã°ããŠã³ãŒããè€éã«ããã®ã§ã¯ãªããããã¥ã¡ã³ãã®ã»ã¯ã·ã§ã³ã§ä¿®æ£ã§ãããšæããŸãã
@albertorestifoã¯ãå®éã«ã¯äœããããããããªãããšãé€ããŠã ç§ã¯promiseãäœã§ãããïŒã¹ã¿ãã¯ãªãŒããŒãããŒã§1500ãã€ã³ã以äžãš500åçïŒPïŒãããç¥ã£ãŠãããio.jsïŒhttps://github.com/ãªã©ïŒã§ã®åäœã®äžéšã«ã€ããŠã責任ãè² ã£ãŠããŸãã nodejs / io.js / issues / 256ïŒã
@ vkarpov15ã¯ãããã¹ã䜿çšããªããããã©ã€ãã©ãªã§ãããã¹ããµããŒãããå¿ èŠã¯ãªãã¯ãã§ããç¹ã«ããããã¹ã䜿çšãããããã¡ãªããããªãããã§ãã ããšããããããããæäŸããªããŠããmongooseã§promiseãç°¡åã«äœ¿çšããããšãã§ããŸã-å éšã§ãµããŒããå®è£ ããmongooseã¯ãç¶æããã®ãããå€ããããããããé ãããããšã©ãŒãçºçãããããªããŸãã @ vkarpov15ã¯ã³ãŒã«ããã¯APIã®äœæ¥ãç¶ç¶ã§ããpromiseãŠãŒã¶ãŒã¯ãšã«ããç°¡åãªã¯ã³ã©ã€ããŒã§Mongooseãpromiseã§ã©ããã§ããŸãã
@benjamingrã¯ãå€éšã®Promiseã©ã€ãã©ãªã䜿çšããŠãããšæ³å®ããŠããŸãã ç§ã¯ã¹ããã¯ã®1ã€ã«åºå·ããŠããŸãããããŠããªãã¯éåžžã«ããç¥ã£ãŠããŸããããã¯ã©ãããŒãæã£ãŠããŸããã
ç§ã¯ããªãã®äž»åŒµãç解ããŠããŸãã äž¡æ¹ããµããŒããããšã倧ããªæ··ä¹±ãçããŸãã ç§ã¯å人çã«ã³ãŒã«ããã¯ã軜èããŠããã®ã§ã代ããã«ããããåé€ããŸãã ãã¶ãã2ã€ã®å¥ã ã®ãªããžããªãå¿ èŠã§ãã1ã€ã¯ãžã§ãã¬ãŒã¿ãšpromiseã䜿çšãããã1ã€ã¯ã³ãŒã«ããã¯ã䜿çšããŸãã ã©ã¡ããåãæ§é ãšAPIãå¯èœãªéãè¿ãç¶æããŸãã
@benjamingrã¯ãå€éšã®Promiseã©ã€ãã©ãªã䜿çšããŠãããšæ³å®ããŠããŸãã ç§ã¯ã¹ããã¯ã®1ã€ã«åºå·ããŠããŸãããããŠããªãã¯éåžžã«ããç¥ã£ãŠããŸããããã¯ã©ãããŒãæã£ãŠããŸããã
é
ãããããã°ãé£ãããæ©èœãè±å¯ã§ãªãå®è£
ã䜿çšããããšãéžæããå Žåããã¡ããïŒPãäœæããããšãéžæããŸãããããã¯ã©ãããŒãšã©ã®ããã«é¢é£ããŠããŸããïŒ ãã€ãã£ãpromise*ã䜿çšããŠãbluebirdã®promisifyAll
ã«äŒŒãã©ãããŒãäœæããã®ã¯å®å
šã«ç°¡åã§ãã
çŽæãå¿ èŠãªå Žå-å¥ã®ããã±ãŒãžãšããŠæå¹åãããããŒãžã§ã³ã®Mongooseã¯ã次ã®æ¹æ³ã§å®è¡ã§ããŸãã
module.exports = require("bluebird").promisifyAll(require("mongoose"))
ããšå
¥åããŸãpackage.json
ãã¡ã€ã«ãäœæããnpmã«å
¬éããŸãããã§ããããã¯ãã€ãã£ãã®Promiseã䜿çšããŠããªãããšèããŠããããšãããããŸãããããã§ããPromiseãããã¿ã€ãããthen
ãšcatch
ãããã³all
ãé€ããã¹ãŠã®ã¡ãœãããåé€ã§ããŸãã Promise
race
ã¯ãåãAPIã«ãªããŸã-ãŸãã¯ããã€ãã£ãã®Promiseããšã¯ã¹ããŒãããŠããããšã人ã
ã«äŒããããšãã§ããŸã-ããã¯2ã€ã®Promises / A +å®è£
ã§ããããã圌ãã¯ç¥ããŸãããçŽæããŸã ;ïŒ
ïŒ*çŸåšpromiseãäœæããé«éãªæ¹æ³ããªãããããŠãŒã¶ãŒã¬ãã«ã§é«éã«èšè¿°ããã®ã¯å°é£ã§ãããã®ãããio.jsã¯promisifyé¢æ°èªäœãæçµçã«ãšã¯ã¹ããŒãããå¯èœæ§ããããŸããã€ãŸããpromiseã³ã³ã¹ãã©ã¯ã¿ãŒã䜿çšããããšã§åŒ·å¶ããŸãããšã«ããé ããªããŸãïŒã
ããã¯ééããªããŸãšããªéžæè¢ã§ãã ãã ãã瀟å ã§çŽæãå®ããããšæããŸããããã¯ã奜ããšå¥œãŸãããšã«ãããããããŠãŒã¶ãŒããã³ã°ãŒã¹ã䜿çšããæ¹æ³ã§ããããããã£ãããšãããã¹ãã«ãã¬ããžããããšããã®ã§ãããããæ¹æ³ã§ãããã³ã°ãŒã¹ã§promiseã©ã€ãã©ãªXã䜿çšããŸããã ç©äºãå¥ã ã®ã¢ãžã¥ãŒã«ã«åãé¢ããšãã®æ¬ ç¹ã¯ãããã®ããŒãžã§ã³ã®ãã³ã°ãŒã¹-ãããã¹ã¯ãã³ã°ãŒã¹3.8ã§ã®ã¿æ©èœããããã¯ãã³ã°ãŒã¹> = 4.1ã§æ©èœããããšèšãã®ãé£ããããšã§ãããŸãããã³ã°ãŒã¹ãå æ¬çãªãããã¹ã©ãããŒãå£ããªãããã«ããã®ã¯å°é£ã§ãã ã
ããã¯ééããªããŸãšããªéžæè¢ã§ãã ãã ãã瀟å ã§çŽæãå®ããããšæããŸããããã¯ã奜ããšå¥œãŸãããšã«ãããããããŠãŒã¶ãŒããã³ã°ãŒã¹ã䜿çšããæ¹æ³ã§ããããããã£ãããšãããã¹ãã«ãã¬ããžããããšããã§ãããã
ãªãããã«å¯ŸããŠãã¹ãã«ãã¬ããžãå¿
èŠ/å¿
èŠãªã®ã§ããïŒ ã³ãŒãã§promiseèªäœããã¹ãããæå³ã¯ãããŸãã-ã©ã€ãã©ãªã«ã¯ãã§ã«ãã¹ãããããŸã-ããã¯ã http
ã¢ãžã¥ãŒã«ã䜿çšããŠãããšãã«ãã¹ããããããªãã®ã§ãã
ãããŠããã³ã°ãŒã¹ãå æ¬çãªçŽæã®ã©ãããŒãç Žãããšãé¿ããã®ã¯é£ããã§ãã
Bluebirdã¯æ¬åœã«ã·ã³ãã«ãªããšãããŸã-ãããã¿ã€ããèŠã€ããŠãããã«Async
ãµãã£ãã¯ã¹ãä»ããã¡ãœãããè¿œå ããŸã-ããã¯æ¬åœã«ã·ã³ãã«ã§å®éã«ããŸãæ©èœããŸã-ããã¯Mongooseãå«ãã»ãšãã©ã®ã©ã€ãã©ãªã§1ã€ã®ã©ã€ããŒã§ãããæçåå²ç¹ã§ã¯ãããŸããã§ããéå»1幎éã«äžåºŠã§ãã
ãšã©ãŒãçºçããããå¯èœæ§ã®ããå€ãã®ã¹ãã£ããã³ã°ã³ãŒããç¶æããå¿ èŠãããçç±ãããããŸããããšããžã±ãŒã¹ã§2ã€ã®APIãæåã§ãµããŒãããå¿ èŠãããã®ã¯å€§å€ãªäœæ¥ã®ããã«æããŸãããäœæ¥ãé²ããã«ã€ããŠåé¡ãçºçããå¯èœæ§ããããŸãã bluebirdã®promisifyAllã³ãŒãããåçšãããä»ã®Promiseã©ã€ãã©ãªïŒçµå±ã¯ãªãŒãã³ãœãŒã¹ïŒã§åäœããããã«é©åãããŸãããæåã§ã¯è¡ããŸããã
ããã®ããŒãžã§ã³ã®mongoose-promisesã¯mongoose3.8ã§ã®ã¿æ©èœããããã¯mongoose> = 4.1ã§æ©èœããŸãããšãmongooseãå æ¬çãªpromiseã©ãããŒãå£ããªãããã«ããããšã¯å°é£ã§ãã
ããŠãçŽæãèªåçã«è¡ãããå Žåã«çºçããªããã°ãªããªãé倧ãªå€æŽã®äŸãæããŠããã ããŸãããã
1ïŒãŠãŒã¶ãŒã®äœ¿ãæ¹ããã¹ããããã
2ïŒæ æ°ã«ãªãããããé¿ãããã®ã§ãããç§ãç解ããŠããããã«ãä»ã®ã»ãšãã©ã®promiseã©ã€ãã©ãªã«ã¯promisifyAllã«çžåœãããã®ããããŸããã ãããããXpromiseæ©èœYã®ãµããŒãããæã人æ°ã®ãããã³ã°ãŒã¹æ©èœã®ãªã¯ãšã¹ãã§ããçç±ã ãšæããŸãã ããã«ãBluebirdã®çŽæãæžãçŽãã€ããã¯ãããŸããããã³ã°ãŒã¹é¢æ°ã«ããã€ãã£ãã«çŽæãè¿ãããã«ããã ãã§ãã
3ïŒçŽæã®å®è£ ãšãããã©ã®ããã«äœ¿çšããŠãããã«ãã£ãŠç°ãªããŸã:)
1ïŒãŠãŒã¶ãŒã®äœ¿ãæ¹ããã¹ããããã
ãŠãŒã¶ãŒããããã䜿çšããæ¹æ³ããã¹ããããšã¯ã©ãããæå³ã§ããïŒ ã³ãŒã«ããã¯ã®äŸããæããŠããã ããŸããïŒ
2ïŒæ æ°ã«ãªãããããé¿ãããã®ã§ãããç§ãç解ããŠããããã«ãä»ã®ã»ãšãã©ã®promiseã©ã€ãã©ãªã«ã¯promisifyAllã«çžåœãããã®ããããŸããã ãããããXpromiseæ©èœYã®ãµããŒãããæã人æ°ã®ãããã³ã°ãŒã¹æ©èœã®ãªã¯ãšã¹ãã§ããçç±ã ãšæããŸãã ããã«ãBluebirdã®çŽæãæžãçŽãã€ããã¯ãããŸããããã³ã°ãŒã¹é¢æ°ã«ããã€ãã£ãã«çŽæãè¿ãããã«ããã ãã§ãã
æžãçŽãå¿ èŠã¯ãããŸããããããåãããšãã§ããŸãããžã§ããªãã¯å®è£ ã¯é ããªãããããžã§ããªãã¯ã§ã¯ãããŸããã
ãŸããåºãå©çšå¯èœãªæ©èœãæåã§å®è£ ããªãã®ãæ æ°ã§ã¯ãããŸããã NodeJSã¯ããšã¯ã¹ãã¬ã¹ãã³ã¢ã«å ¥ããŠããªãããšã«æ æ°ã§ããïŒ TC39ã¯ãã¢ã³ããŒã¹ã³ã¢ãã³ã¢ã«å ¥ããªãã®ãé¢åã§ããïŒ èŠåïŒã³ãŒã«ããã¯ïŒã«åºå·ããããšã«ããããŠãŒã¶ãŒãå¿ èŠãªåæå®è¡ããªããã£ãã䜿çšã§ããããã«ãªããŸãã
3ïŒçŽæã®å®è£ ãšãããã©ã®ããã«äœ¿çšããŠãããã«ãã£ãŠç°ãªããŸã:)
ãããšãbluebirdã®çŽæããŸãã¯QãŸãã¯Whenã¯ãå®è£ ã¯ç°ãªããŸããããã¹ãŠåãããšãè¡ãã®ã§ã奜ããªãã®ãéžãã§ãã ããã ç§ã¯ãããã©ã®ããã«å£ãããçåã«æã£ãŠããŸãã
ããã§ã®ãã®è°è«ã§ç§ãèŠéããŠããããšã1ã€ãããŸãã
mongooseãæšæºã®promiseãè¿ãå ŽåïŒæšæºã§ã¯ES6ãã€ãã£ãå®è£
ãæå³ããŸãïŒãES6äºæã®Promiseã©ã€ãã©ãªãšäºææ§ãããã¹ãã§ã¯ãããŸãããïŒ Promise.all([model.query().exec(), ...])
ã¯åé¡ãªãå®è¡ã§ããåçã®å Žåã¯ãã«ãŒããŒãqãå®è¡ã§ããŸãã
ã§ã¯ãã³ãŒã«ããã¯ãšæšæºã®Promiseãè¿ããŠïŒçŸåšã®ããã«ãmpromiseããåãé€ããïŒããŠãŒã¶ãŒã«ãæ°ã«å ¥ãã®Promiseã©ã€ãã©ãªã䜿çšãããŠã¿ãŸãããïŒ ãããšãç§ã¯ããã§äœããæ¬ ããŠããŸããïŒ
@albertorestifoãããšããã€ãã£ãã®çŽæã¯çŸæç¹ã§ã¯é ãããŠãŒã¶ãŒã©ã³ãã©ã€ãã©ãªãšåçã«ãªããŸã§ã«æ°å¹Žãããå¯èœæ§ããããŸãã
@benjamingrããªãã¯ããã€ãã®è¯ãç¹ãäœããŸãã mongooseã®çŽæã®äž»ãªãã€ã³ãã¯ãä»ã®ã©ã€ãã©ãªãªãã§mongooseéåææäœã§yield
ã䜿çšã§ããããã«ããããšã§ãããã®ãããåœé¢ã®éãçŽæãå®ã£ãŠããŸãã IMOã¯ãä»åŸãã³ã°ãŒã¹ã³ã¢ã®äžéšãšãªãã¯ãã§ãã
QãŸãã¯ãã€çŽæèœåããããŸããïŒ
QãŸãã¯ãã€çŽæèœåããããŸããïŒ
ã¯ããäºå®äžãç§ãç¥ã£ãŠããåºãæ®åããŠãããã¹ãŠã®Promiseã©ã€ãã©ãªã¯ãããçš®ã®çŽæãæäŸããŠããŸãã
ãã€ã§ãïŒ https ïŒ//github.com/cujojs/when/blob/master/docs/api.md#nodeliftall
Qã¯æ¬¡ã®ãšããã§ãïŒ https ïŒ//github.com/kriskowal/q/wiki/API-Reference#qnfbindnodefunc -args
ãã€ãã£ãpromiseã«ã¯ãŸã ãããŸããããããã¯çŸåšåãçµãã§ãããã®ã§ã-promiseãäœæããããã®é«éãã¹ïŒã€ãŸããpromiseã³ã³ã¹ãã©ã¯ã¿ãŒã§ã¯ãªãïŒãååšãããšãNodeJSã¯ãã€ãã£ãpromiseã®ã³ã¢ã§ããããµããŒãããå¯èœæ§ããããŸãïŒãŠãŒã¶ãŒã©ã³ãã§_é«é_å®è¡ãããŸãïŒã
ãã³ã°ãŒã¹ã®çŽæã®äž»ãªãã€ã³ãã¯ãä»ã®ã©ã€ãã©ãªãªãã§ãã³ã°ãŒã¹éåææäœã§yieldã䜿çšã§ããããã«ããããšã§ã
ãšã«ããpromiseã§æå³ã®ããæ¹æ³ã§yield
ã䜿çšããã«ã¯ãã©ã€ãã©ãªãå¿
èŠã§ãã ãžã§ãã¬ãŒã¿ãŒãéåæé¢æ°ãšããŠãã³ãã³ã°ãã9LoCãèªåã§äœæã§ããå Žåã¯ãééããªãpromisifyãäœæã§ããŸããã»ãšãã©ã®ãŠãŒã¶ãŒãšåãããã«ããšã«ãããã®ããã®ã©ã€ãã©ãªã䜿çšããŸãã
ç§ã¯ééããªããã³ã°ãŒã¹ã§çŽæãèš±å¯ããã/å¿ èŠããããšæããŸãããããã¯åé²ã®éã§ãããèšèªãçŸåšã©ã®ããã«äžŠè¡æ§ãæã£ãŠãããã§ãããç§ã¯æ£çŽã«ãããæ¹æ³ããšã«æåã§è¡ãã®ã¯èŠçã ãšæããŸãã ããã¥ã¡ã³ãã®ãpromiseã§ã®äœ¿çšããŸãã¯ããžã§ãã¬ãŒã¿ã§ã®äœ¿çšãã»ã¯ã·ã§ã³ã§ãã©ã€ãã©ãªã䜿çšããŠã©ã®ããã«è¡ããããã瀺ãã ãã§ããå ŽåããããŸãã
åé¡ã¯ããã§ã«ã¡ãœããããšã«å®è¡ããŠããããšã§ããå éšã®Promiseã©ãããŒãå€æŽããã ãã§ãã ãããã«ããã5.0ãŸã§ã³ã¢ããpromiseãå®å šã«åé€ããããšã¯ã§ããŸããã ç§ã¯ãããå»æ¢ãããšããèãã«åŸé ã§ãã @benjamingrã¯ç§ã綿å¯ã«æ€èšããªããã°ãªããªãããã€ãã®è¯ãè°è«ãããŸããã次ã®ã¹ãããã¯ãšã«ããïŒ2688ã«ãªããšæããŸãã
ããªãã¯æããã«ãã³ã°ãŒã¹ã®çµéšãè±å¯ã§ãããã«éèŠãªã®ã¯ãŠãŒã¶ãŒã§ãããã®éžæãç解ããŠããŸãã ãé£çµ¡ããã ãããããšãããããŸãã
ãitsããšå ¥åããŸããããiPhoneã¯ãit'sãã«èªåä¿®æ£ããå¿ èŠããããšæããGitHubã¯ã³ã¡ã³ãã®ç·šéã¯èå³æ·±ããŠãŒã¹ã±ãŒã¹ã§ã¯ãªããšæããŸããã ããã«ã³ã¡ã³ãã¹ãã ã§ããããªãã:)
ã³ã¡ã³ãã®å³äžã«ããéçãã¯ãªãã¯ãããšãWebãµã€ãã®ã³ã¡ã³ããç·šéã§ããŸãã
ç§ã¯åžžã«å¿ã®ããã£ãè°è«ãç¹ã«äœãæ°ããããšãæããŠãããè°è«ãéããŠããŸãïŒããŒã«ïŒåŸã§ãã£ãšè°è«ããããã«ããªãã«pingãããããããŸãã:)
æªæ¥ã¯ãã€ãã£ãã®çŽæã«å±ããŠããããã§ãã Mongooseã¯ãmongo opsã®æ¥çæšæºã§ãããæšæºã®çŽæã«äŸåããããšãå®å šã«æå¹ã§ãã
æšæºçãªçŽæã¯å¿ ç¶çã«æçããã©ã®ãã¬ãŒã ã¯ãŒã¯ãããåºãæ®åããã§ãããã ãããã䜿çšããããã®è¬èãª+1ã
@iliakanããããå°æ¥ã ãã€ãã£ããããã¹ãæ©ããŠã2016幎åã°ãŸã§ãæšæºãã«ãªããšã¯æããŸãããæçåãããããŸããŸãªãããã¹ã©ã€ãã©ãªã¯æ·±ãæ ¹ä»ããŠããã埮åŠãªçãå€ãããŸãã ãããã«ããããã³ã°ãŒã¹ã¯ãå€§å¹ ãªåŸæ¹ç Žå£ã®å€æŽãªãã«ãããã©ã«ãã§ãã€ãã£ããã«åãæ¿ããããšã¯ã§ããŸããã
@vkarpov15確ãã«ç解ããŠããŸãã
ãã®éã«æçã§ããå¯èœæ§ããããã®-劥åãšãã€ãã£ãã®çŽæã®éã®äž»èŠãªéäºææ§ãæŠèª¬ããç°¡åãªããŒãžã å°ãªããšãmpromise
ã§è©ŠããŠã¯ãããªãããš;ïŒ
çŸåšcatch
ããªãããšã¯æ£ãããšæããŸããïŒããããã¹ãŠã®å¶éã§ãã
ããããªããES6APIãå®éã«æãäžããŠããªãã mpromiseã¯Promises/A +ã®ã¿ãå®è£
ããŸããã€ãŸãã.catchïŒïŒãé·ãã¹ã¿ãã¯ãã¬ãŒã¹ãªã©ã¯å®è£
ãããŸãããåºæ¬çã«ã .then()
ã§ãªããã®ã¯ãmpromiseã®å®è£
ã®ç¯å²å€ã§ãã
äžè¬çã«ãPromises / A +ãå®è£ ãããã®ã¯ãé«ã¬ãã«ã®èŠ³ç¹ããES6 Promiseãå®è£ ããŸããããã®éã¯åœãŠã¯ãŸããŸããã Promises / A +ã¯ãäœã¬ãã«ã®å®è£ ã®è©³çŽ°ã«ã€ããŠéåžžã«å ·äœçã§ããããšãã°ãbluebirdã¯Promises / A +ã«æ£ç¢ºã«æºæ ããŠããŸããããŸããä»ã®äžè¬çãªPromisesã©ã€ãã©ãªã«ã€ããŠã¯ããããŸããããç¬èªã®æ¹æ³ã ããããããç¹ã«ããªãããŒã«ãããã®ã§ãã
ã€ãŸãããã«ãŒããŒããšãã€ãã£ããããã¹ã䜿çšã§ããããã«ãªããŸãããïŒ
ããrequire('mongoose').Promise = global.Promise
ã¯ããã³ã°ãŒã¹ã«ãã€ãã£ãã®çŽæã䜿çšãããŸãã ES6ã®promiseã³ã³ã¹ãã©ã¯ã¿ãŒã¯äœ¿çšã§ããã¯ãã§ãããçŸæç¹ã§ã¯ããã€ãã£ããbluebirdãããã³Qã§ã®ã¿ãã¹ãããŠããŸãã
@ vkarpov15ããã¯çŽ æŽãããã§ãïŒ ã©ããããããšãïŒ
@ vkarpov15ã©ããããããšãïŒ ãããã£ãïŒ
ãããééããªãã ãã£ãããïŒ :)
@vkarpov15ããã¯æ¬åœã«ããã§ã
æãåèã«ãªãã³ã¡ã³ã
ãã
require('mongoose').Promise = global.Promise
ã¯ããã³ã°ãŒã¹ã«ãã€ãã£ãã®çŽæã䜿çšãããŸãã ES6ã®promiseã³ã³ã¹ãã©ã¯ã¿ãŒã¯äœ¿çšã§ããã¯ãã§ãããçŸæç¹ã§ã¯ããã€ãã£ããbluebirdãããã³Qã§ã®ã¿ãã¹ãããŠããŸãã