#1699์ ๋ํ ํ ๋ก ์ ์ฐธ์กฐํ์ญ์์ค.
๋ชจ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์ด ์๋ฃ๋ ํ ๋ฌด์ธ๊ฐ๋ฅผ ์ํํ๊ธฐ ์ํด Promise.all()์ ์ฌ์ฉํ ์ ์๊ธฐ๋ฅผ ์ ๋ง๋ก ๊ณ ๋ํ๊ณ ์์ต๋๋ค.
:+1:
https://github.com/LearnBoost/mongoose/issues/1699 ์์ ๋ช ํํ์ง ์์ ํ ๊ฐ์ง๋ ๊ตฌํ์ด ๊ธฐ๋ณธ๊ฐ์ด ๋ ๊ฒ์ ๋๋ค.
์ญ๋ฐฉํฅ ๋ฆด๋ฆฌ์ค๊ฐ ์๋๋ผ๋ ์ ์ ๊ฐ์ํ๋ฉด mpromise๊ฐ ๊ธฐ๋ณธ๊ฐ์ด ๋์ด์ผ ํ์ง๋ง ์ฌ์ ์ํ ์ ์์ต๋๋ค.
+1
:+1:
ํดํน๋นํ๋ ์ง์ ์ด ์๋์? ๋๋ 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'))
ํ๋ ๊ฒ์ ์ค์ ๋ก ์ง๊ธ๊น์ง Mongoose 4์ ํจ๊ป ์๋ํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ด๊ฒ์ ๋ค๋ฃจ๋ ํ๊ท ํ
์คํธ๊ฐ ๋๋ฌด ํ์ ์ด ๋ฉ๋๊น?
์ง๊ธ์ ์๋๋๋ค. ๋๋ถ๋ถ์ ์์ ์ #2754 ๋ฐ vkarpov15 /kareem#2์ ๋ฐ๋ผ kareem ๋ชจ๋์์ ์ด๋ฃจ์ด์ง๋๋ค. ์๋ํ๋ฉด ๊ทธ๋ ๊ฒ ํ๋ฉด ํ ๋๋ก ๋ ๋ง๋ฆฌ์ ์๋ฅผ ์ฃฝ์ด๊ณ ํํฌ์ ์ฝ์์ ๋ง๋ค๊ธฐ ์ํด ์์ฑ๋ ์ ๋ง ์ง์ ๋ถํ ํฌ์ธํธ ์ปท ๋์ผ์ค๋ฅผ ์ ๊ฑฐํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ํ๋ ฅ. ๊ทธ๋๋ ์์ ๋กญ๊ฒ ํด๋ณด์ญ์์ค. ์ ๋ PR์ ์ด๋ ค ์์ต๋๋ค.
ํ์ง๋ง ๋ค๋ฅธ Promise ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ณ์ ์ง์ํด์ผ ํ๋ ์ด์ ๋ ๋ฌด์์ ๋๊น? ES6 Promises ์ฌ์์ ์ด์ ํ๊ณ ํ๊ณ ์ฌ๊ธฐ์ ๋จธ๋ฌผ ๊ฒ์ ๋๋ค. ์ด์ ๋ฒ์ ์ ๋ ธ๋์์ ์ฌ์ฉํ ์ ์์ ๋ ๋ก๋๋ ํด๋ฆฌํ๊ณผ ํจ๊ป ์์ํ ES6 ์ฝ์์ ์ฌ์ฉํ ์ ์์ต๋๊น?
๊ทธ๋ ๋ค๋ฉด ์๋ํด ๋ณผ ์ ์์ต๋๋ค.
์์ ์ ์ํ๋ ES6 ํธํ ๊ฐ๋ฅํ Promise ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ๋ง์ ์ฌ๋๋ค์ด when, q, rsvp ๋ฑ์ ์ฌ์ ํ ๋ง์ ํฌ์๋ฅผ ํ๊ณ ์์ผ๋ฉฐ ๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์๋ ์ผ๋ฐ ํด๋ฆฌํ์ด ํฌ์ฐฉํ์ง ๋ชปํ๋ ๊ณ ์ ํ ํน์ฑ์ด ์์ต๋๋ค.
๋๋ ๋ค๋ฅธ ์ ์์ ์ด๋ ค ์์ต๋๋ค. ๋๋ ํน๋ณํ ์ฝ์์ ์ข์ํ์ง ์๊ฑฐ๋ ์ฌ์ฉํ์ง ์์ต๋๋ค. ์ด ๊ธฐ๋ฅ์ ์ฌ๋๋ค์ด "์ฝ์์ผ๋ก ๋ธ๋ฃจ๋ฒ๋ ๊ธฐ๋ฅ X ์ง์" ๋๋ "๋ค์ดํฐ๋ธ rsvp.js ์ง์"์ ์์ฒญํ๋ ๊ฒ๊ณผ ๊ด๋ จ๋ ๋ฌธ์ ๊ฐ ์ฐ์ ํด ์๋ค๋ ์ฌ์ค์ ๋๊ธฐ๋ฅผ ๋ถ์ฌ๋ฐ์์ต๋๋ค. " ๊ทธ๋ฆฌ๊ณ ์ฌ๋๋ค์ด ์์ ์ ์ฝ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํํฐ์ ๊ฐ์ ธ์ค๋๋ก ํ๋ ๊ฒ์ด ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ์ข ๊ฒฐํ๋ ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ ๋๋ค.
๋ฌด์จ ๋ง์ธ์ง ์๊ฒ ๋ค. ์ ๋ Promises์ ํฐ ์ฌ์ฉ์์ด์ ์ง์ง์์
๋๋ค. ๊ธฐ์ค์ ์ ์ฉํ๋ ๊ฒ์ด ๋ฐ๋์งํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
A+ ์ฝ์์ ES6์ ํ์ ์์๋ก ์ ํ๋์์ต๋๋ค. 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๊ฐ ๊ธฐ๋ณธ๊ฐ์ด ๋ ๊ฒ์
๋๋ค.
์ ๋ง๋ค, ์ค์ํด์ ๋ฏธ์ํด.
ํ์ฌ ๊ตฌํ๊ณผ ๋ค๋ฅธ ์ฝ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ดํด๋ณด์์ต๋๋ค.
๋๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ ๋ง๋ค ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
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
๋ฉ์๋๊ฐ ์๋ ์ ํ ๊ฐ์ฒด์ ์ฝ์์ ๋ชฝ๊ตฌ์ค์ ๋
ธ์ถํด์ผ ํฉ๋๋ค.
์ด๊ฒ์ด ๋น์ ์ด ์ผ๋์ ๋์๋ ๊ฒ์ ๋๊น? ๊ทธ๋ ๋ค๋ฉด ํ ๋ฆฌํ์คํธ๋ก ์์ ํ๊ฒ ์ต๋๋ค.
ํธ์งํ๋ค:
mongoose.set('Promise', Promise);
๋ฅผ ์์ฑํ๋ ๊ฒ์ ๋งค์ฐ ์ด๋ฆฌ์์ ์ผ์
๋๋ค. ES6์ด ๊ธฐ๋ณธ์ด์ด์ผ ํ๋ฉฐ ์ ํํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์์ด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค(ES6 Promises๋ฅผ ์ฌ์ฉํ ์ ์์ ๋๋ง๋ค mpromise).
๋ฌผ๋ก ์ ๋๋ค. ๋์์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค. ๊น๋ค๋ก์ด ๋ถ๋ถ์ 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๊ฐ Node 3.0์ผ๋ก ๋ณํฉ๋๋ฉด์ ES6 Promises ๋ฐ Generators๊ฐ ์ง์๋ฉ๋๋ค.
์ง์์ ์ค๋จํ๋ ๊ฒ์ ์์ฒญ๋ ํํด๊ฐ ๋ ๊ฒ์ ๋๋ค.
์ฆ, Promise.promisifyAll(require("mongoose"))
๋ ํ์ค์ ๋ถํฉํ๋ Mongoose์ฉ ๋น ๋ฅธ(์๋ ์๋๋ณด๋ค ๋น ๋ฅธ) ๋ํผ๋ฅผ ์์ฑํ๊ณ ์ด์ ๋ํด ์๋ฌด ์กฐ์น๋ ์ทจํ์ง ์๊ณ ๋ ๋ชจ๋ API๋ฅผ ๋๋ฌ์ธ๊ณ ์์ต๋๋ค. ์ฌ์ค, export ๊ฐ์ฒด์ Promise.promisifyAll
๋ฅผ ์ง์ ํ๊ณ bluebird Promise์ Dual Promise ๋ฉ์๋ (save - saveAsync)
๋ฅผ ๋ฌด๋ฃ๋ก ๋
ธ์ถ์ํจ ๋ค์ ์ค์ ์์
์ ํ์ง ์๊ณ ๋ bluebird Promise ์ธํฐํ์ด์ค๋ฅผ ๋
ธ์ถํ๋ค๊ณ ๋งํ ์ ์์ต๋๋ค.
๊ทธ๋์ ์ ๊ฐ bluebird promise๋ฅผ ์ฌ์ฉํ๋ ๋์ ๋ ๊ฐ์ ์ธํฐํ์ด์ค๋ก ์ฝ๋ฉํ์ฌ ์ฝ๋๋ฅผ ๋ณต์กํ๊ฒ ๋ง๋๋ ๊ฒ๋ณด๋ค ๋ฌธ์์ ์น์ ์์ ์ด ๋ชจ๋ ๊ฒ์ ์์ ํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
@albertorestifo ๋ ์ค์ ๋ก ์ญ์ ๋์ง ์๋๋ค๋ ์ ์ ์ ์ธํ๊ณ ๋. ๋๋ ์ฝ์์ด ๋ฌด์์ธ์ง ์ ์๊ณ ์์ผ๋ฉฐ(์คํ ์ค๋ฒํ๋ก์์ 1500ํฌ์ธํธ ์ด์ 500 ๋ต๋ณ:P) io.js์์ ์๋ํ๋ ๋ฐฉ์์ ์ผ๋ถ์ ๋ํด์๋ ์ฑ ์์ด ์์ต๋๋ค(์: https://github.com/ nodejs/io.js/issues/256).
๊ทธ๋ ๋ค๊ณ ํด์ @vkarpov15 ๊ฐ ์ฝ์์ ์ฌ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ ์์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ฝ์์ ์ง์ํ ํ์๊ฐ ์๋ค๊ณ ์๊ฐํ๋ค๋ ์ฌ์ค์ ๋ณํ์ง ์์ต๋๋ค. mongoose๊ฐ ์ ๊ณตํ์ง ์๋๋ผ๋ ์ฝ๊ฒ mongoose์ ํจ๊ป promise๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ด๋ถ์ ์ผ๋ก ์ง์์ ๊ตฌํํ๋ mongoose๋ ์ ์ง ๊ด๋ฆฌ๊ฐ ๋ ๋ง๊ณ ๋๋ฆฌ๊ณ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ ์ฝ์ต๋๋ค. @vkarpov15 ๋ ์ฝ๋ฐฑ API ์์ ์ ๊ณ์ํ ์ ์์ผ๋ฉฐ ์ฌ์ฉ์๋ Mongoose๋ฅผ ์ฝ๊ฒ ํ๋์ ๋ผ์ด๋๋ก ํ๋ผ๋ฏธ์ค๋ก ๋ฌถ์ ์ ์๋ค๊ณ ์ฝ์ํฉ๋๋ค.
@benjamingr ๋ ์ธ๋ถ Promise ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ๋๋ ์ฌ์์ ์๋ ๊ฒ์ ๊ณ ์ํ๊ณ ์์ต๋๋ค. ์ฌ๋ฌ๋ถ๋ ์ ์์๊ฒ ์ง๋ง ๋ํผ๊ฐ ์์ต๋๋ค.
๋๋ ๋น์ ์ ์์ ์ ๋ด ๋๋ค. ๋ ๋ค ์ง์ํ๋ฉด ์์ฒญ๋ ํผ๋์ด ๋ฐ์ํฉ๋๋ค. ์ ๋ ๊ฐ์ธ์ ์ผ๋ก ์ฝ๋ฐฑ์ ์ซ์ดํ๋ฏ๋ก ๋์ ์ฝ๋ฐฑ์ ์ญ์ ํฉ๋๋ค. ํ๋๋ ์์ฑ๊ธฐ์ ์ฝ์์ ์ฌ์ฉํ๊ณ ๋ค๋ฅธ ํ๋๋ ์ฝ๋ฐฑ์ ์ฌ์ฉํ๋ ๋ ๊ฐ์ ๋ณ๋ ๋ฆฌํฌ์งํ ๋ฆฌ๊ฐ ์์ด์ผ ํฉ๋๋ค. ๋ ๋ค ๋์ผํ ๊ตฌ์กฐ์ API๋ฅผ ์ต๋ํ ๊ฐ๊น๊ฒ ์ ์งํฉ๋๋ค.
@benjamingr ๋ ์ธ๋ถ Promise ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ๋๋ ์ฌ์์ ์๋ ๊ฒ์ ๊ณ ์ํ๊ณ ์์ต๋๋ค. ์ฌ๋ฌ๋ถ๋ ์ ์์๊ฒ ์ง๋ง ๋ํผ๊ฐ ์์ต๋๋ค.
๋๋ฆฌ๊ณ ๋๋ฒ๊ทธํ๊ธฐ ์ด๋ ต๊ณ ๊ธฐ๋ฅ์ด ๋ ํ๋ถํ ๊ตฌํ์ ์ฌ์ฉํ๊ธฐ๋ก ์ ํํ ๊ฒฝ์ฐ ๋น์ฐํ ์ ํํด์ผ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ด ๋ํผ์ ์ด๋ค ๊ด๋ จ์ด ์์ต๋๊น? ๊ธฐ๋ณธ ์ฝ์*์ ์ฌ์ฉํ์ฌ bluebird์ promisifyAll
์ ์ ์ฌํ ๋ํผ๋ฅผ ์์ฑํ๋ ๊ฒ์ ๋งค์ฐ ์ฝ์ต๋๋ค.
๋ณ๋์ ํจํค์ง๋ก ๋ชฝ๊ตฌ์ค์ ์ฝ์์ด ํ์ฑํ๋ ๋ฒ์ ์ ์ํ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ํ ์ ์์ต๋๋ค.
module.exports = require("bluebird").promisifyAll(require("mongoose"))
์
๋ ฅpackage.json
ํ์ผ์ ๋ง๋ค๊ณ npm์ ๊ฒ์ํฉ๋๋ค.์ด์ "๋ค์ดํฐ๋ธ ํ๋ผ๋ฏธ์ค๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค"๊ณ ์๊ฐํ๋ ๊ฒ์ ์๋๋ค. ์ฌ์ ํ Promise ํ๋กํ ํ์
์์ then
๋ฐ catch
๋ฅผ ์ ์ธํ ๋ชจ๋ ๋ฉ์๋๋ฅผ ์ญ์ ํ ์ ์๊ณ all
๋ฐ race
from Promise
๊ทธ๋ฆฌ๊ณ ๋์ผํ API๋ก ๋๋ฉ๋๋ค. ๋๋ ์ฌ๋๋ค์๊ฒ ๊ธฐ๋ณธ ์ฝ์์ ๋ด๋ณด๋ด๊ณ ์๋ค๊ณ ๋งํ ์ ์์ต๋๋ค. ๊ทธ๋ค์ ๋จ์ง ๋ ๊ฐ์ Promises/A+ ๊ตฌํ์ด๊ธฐ ๋๋ฌธ์ ์์ง ๋ชปํ ๊ฒ์
๋๋ค. ์ฝ์ํฉ๋๋ค ;)
(* ๋น ๋ฅด๊ฒ ์์ฑํ๋ ๊ฒ์ ์ฌ์ฉ์ ์์ค์์ ๋ ์ด๋ ต์ต๋๋ค. ์๋ํ๋ฉด ์ง๊ธ ๋น์ฅ Promise๋ฅผ ์์ฑํ๋ ๋น ๋ฅธ ๋ฐฉ๋ฒ์ด ์๊ธฐ ๋๋ฌธ์ io.js๊ฐ ๊ฒฐ๊ตญ promisify ํจ์ ์์ฒด๋ฅผ ๋ด๋ณด๋ผ ๊ฐ๋ฅ์ฑ์ด ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ด์จ๋ ์ฒ์ฒํ).
ํ์คํ ๊ด์ฐฎ์ ๋์์ ๋๋ค. ์ข๋ ์ซ๋ ์ฌ์ฉ์๊ฐ ๋ชฝ๊ตฌ์ค๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์์ด๊ธฐ ๋๋ฌธ์ ์ฌ๋ด์์ ์ฝ์์ ์งํค๊ณ ์ถ์ต๋๋ค. ๋ชฝ๊ตฌ์ค์ ํจ๊ป ์ฝ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ X๋ฅผ ์ฌ์ฉํฉ๋๋ค." ๊ฐ๋ณ ๋ชจ๋๋ก ์ฐ๊ฒฐ์ ๋์ ๋์ ๋จ์ ์ "์ด ๋ฒ์ ์ mongoose-promise๋ mongoose 3.8์์๋ง ์๋ํ๊ณ ์ด๊ฒ์ mongoose >= 4.1์์ ์๋ํฉ๋๋ค"๋ผ๊ณ ๋งํ๋ ๊ฒ์ด ๊น๋ค๋กญ๊ณ mongoose๊ฐ ์ค์ํ ์ฝ์ ๋ํผ๋ฅผ ๊นจ๋ ๊ฒ์ ํผํ๊ธฐ๊ฐ ์ด๋ ต๋ค๋ ๊ฒ์ ๋๋ค. .
ํ์คํ ๊ด์ฐฎ์ ๋์์ ๋๋ค. ์ข๋ ์ซ๋ ์ฌ์ฉ์๊ฐ ๋ชฝ๊ตฌ์ค๋ฅผ ์ฌ์ฉํ๊ฒ ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ฌ๋ด์์ ์ฝ์์ ์งํค๊ณ ์ถ์ต๋๋ค.
ํ
์คํธ ์ปค๋ฒ๋ฆฌ์ง๋ฅผ ์ํ๊ฑฐ๋ ํ์๋ก ํ๋ ์ด์ ๋ ๋ฌด์์
๋๊น? ์ฝ๋์์ ์ฝ์ ์์ฒด๋ฅผ ํ
์คํธํ๋ ๊ฒ์ ์๋ฏธ๊ฐ ์์ต๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ์๋ ์ด๋ฏธ ํ
์คํธ๊ฐ ์์ต๋๋ค. ์ด๊ฒ์ ์ฌ์ฉํ ๋ http
๋ชจ๋์ ํ
์คํธํ๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ชฝ๊ตฌ์ค๊ฐ ๊ฐ์ฅ ์ค์ํ ์ฝ์ ๋ํผ๋ฅผ ๊นจ๋ ๊ฒ์ ํผํ๊ธฐ๊ฐ ์ด๋ ต์ต๋๋ค.
Bluebird๋ ์ ๋ง ๊ฐ๋จํ ์์
์ ์ํํฉ๋๋ค. ํ๋กํ ํ์
์ ์ฐพ์ ๋ค์ Async
์ ๋ฏธ์ฌ๊ฐ ์๋ ๋ฉ์๋๋ฅผ ์ถ๊ฐํฉ๋๋ค. ์ด๊ฒ์ ์ ๋ง ๊ฐ๋จํ๊ณ ์ค์ ๋ก ์ ์๋ํฉ๋๋ค. Mongoose๋ฅผ ํฌํจํ ๋๋ถ๋ถ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋ ํ๋์ ๋ผ์ด๋์ด๋ฉฐ ์ค๋จ๋์ง ์์์ต๋๋ค. ์ง๋ 1๋
๋์ ๋๋ฅผ ์ํด ํ ๋ฒ์ด๋ผ๋.
์ ์ฌ์ ์ผ๋ก ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ ์ฌ์ด ๋ง์ ์คํฐ์นญ ์ฝ๋๋ฅผ ์ ์งํ๋ ค๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๋ ๊ฐ์ API๋ฅผ ์๋์ผ๋ก ์ง์ํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ ์์ ์ฒ๋ผ ๋ค๋ฆฌ๊ณ ์์ ์ ์ค๋จํ ์ ์์ต๋๋ค. bluebird์ promisifyAll ์ฝ๋๋ฅผ "๋น๋ ค" ํ๊ณ ๋ค๋ฅธ Promise ๋ผ์ด๋ธ๋ฌ๋ฆฌ(๊ฒฐ๊ตญ ์คํ ์์ค์)์ ํจ๊ป ์๋ํ๋๋ก ์กฐ์ ํ์ง๋ง ์๋์ผ๋ก ํ์ง๋ ์์ ๊ฒ์ ๋๋ค.
"์ด ๋ฒ์ ์ mongoose-promise๋ mongoose 3.8์์๋ง ์๋ํ๊ณ , ์ด๊ฒ์ mongoose >= 4.1์์ ์๋ํฉ๋๋ค." ๊ทธ๋ฆฌ๊ณ ๋ชฝ๊ตฌ์ค๊ฐ ๊ฐ์ฅ ์ค์ํ ์ฝ์ ๋ํผ๋ฅผ ๊นจ๋ ๊ฒ์ ํผํ๋ ๊ฒ์ ์ด๋ ต์ต๋๋ค.
๊ธ์์, ์ฝ์์ด ์๋์ด๋ผ๋ฉด ์ผ์ด๋์ผ ํ๋ ํ๊ธฐ์ ์ธ ๋ณํ์ ์๋ฅผ ๋ค์ด์ฃผ์๊ฒ ์ต๋๊น?
1) ์ฌ์ฉ์๊ฐ ์ฌ์ฉํ๋ ๋ฐฉ์์ ํ ์คํธํ๊ณ ์ถ์ต๋๋ค.
2) ๊ฒ์ผ๋ฅด๊ณ ํผํ๊ณ ์ถ์ง๋ง ๋๋ถ๋ถ์ ๋ค๋ฅธ ์ฝ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์๋ promisifyAll์ ํด๋นํ๋ ๊ฒ์ด ์๋ค๋ ๊ฒ์ ์ดํดํฉ๋๋ค. ์ด๊ฒ์ด "Xpromise ๊ธฐ๋ฅ Y ์ง์"์ด ๊ฐ์ฅ ์ธ๊ธฐ ์๋ ๋ชฝ๊ตฌ์ค ๊ธฐ๋ฅ ์์ฒญ์ธ ์ด์ ๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๊ฒ๋ค๊ฐ, ์ฐ๋ฆฌ๋ Bluebird์ ์ฝ์์ ๋ค์ ์์ฑํ ์๊ฐ์ด ์์ต๋๋ค. ๋จ์ง mongoose ํจ์๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฝ์์ ๋ฐํํ๋๋ก ํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
3) ์ฝ์์ ๊ตฌํ ๋ฐ ์ฌ์ฉ ๋ฐฉ๋ฒ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค. :)
1) ์ฌ์ฉ์๊ฐ ์ฌ์ฉํ๋ ๋ฐฉ์์ ํ ์คํธํ๊ณ ์ถ์ต๋๋ค.
์ฌ์ฉ์๊ฐ ์ฌ์ฉํ๋ ๋ฐฉ์์ ํ ์คํธํ๋ค๋ ๊ฒ์ ๋ฌด์์ ์๋ฏธํฉ๋๊น? ์ฝ๋ฐฑ์ ๋ํ ๋น์ ๋ฅผ ๋ณด์ฌ์ค ์ ์์ต๋๊น?
2) ๊ฒ์ผ๋ฅด๊ณ ํผํ๊ณ ์ถ์ง๋ง ๋๋ถ๋ถ์ ๋ค๋ฅธ ์ฝ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์๋ promisifyAll์ ํด๋นํ๋ ๊ฒ์ด ์๋ค๋ ๊ฒ์ ์ดํดํฉ๋๋ค. ์ด๊ฒ์ด "Xpromise ๊ธฐ๋ฅ Y ์ง์"์ด ๊ฐ์ฅ ์ธ๊ธฐ ์๋ ๋ชฝ๊ตฌ์ค ๊ธฐ๋ฅ ์์ฒญ์ธ ์ด์ ๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๊ฒ๋ค๊ฐ, ์ฐ๋ฆฌ๋ Bluebird์ ์ฝ์์ ๋ค์ ์์ฑํ ์๊ฐ์ด ์์ต๋๋ค. ๋จ์ง mongoose ํจ์๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฝ์์ ๋ฐํํ๋๋ก ํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
๋ค์ ์์ฑํ ํ์๊ฐ ์์ต๋๋ค. ๊ฐ์ ธ๊ฐ ์ ์์ต๋๋ค. ์ผ๋ฐ ๊ตฌํ์ด ๋ ๋๋ฆฌ๊ธฐ ๋๋ฌธ์ ์ผ๋ฐ์ด ์๋๋๋ค.
๋๋ฆฌ ์ฌ์ฉ๋๋ ๊ธฐ๋ฅ์ ์๋์ผ๋ก ๊ตฌํํ์ง ์๋ ๊ฒ๋ ๊ฒ์ผ๋ฆ์ด ์๋๋๋ค. NodeJS๋ ์ฝ์ด์ ์ต์คํ๋ ์ค๋ฅผ ๋ฃ์ง ์๊ธฐ ๋๋ฌธ์ ๊ฒ์ผ๋ฅธ๊ฐ์? TC39๋ ํต์ฌ์ ๋ฐ์ค์ ๋ฃ์ง ์์ ๊ฒ์ผ๋ฅธ๊ฐ์? ๊ท์น(์ฝ๋ฐฑ)์ ๊ณ ์ํจ์ผ๋ก์จ ์ฌ์ฉ์์๊ฒ ์ํ๋ ๋์์ฑ ํ๋ฆฌ๋ฏธํฐ๋ธ๋ฅผ ์ฌ์ฉํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
3) ์ฝ์์ ๊ตฌํ ๋ฐ ์ฌ์ฉ ๋ฐฉ๋ฒ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค. :)
๊ธ์, bluebird์ ์ฝ์, ๋๋ Q's ๋๋ When's - ๊ตฌํ์ ๋ค๋ฅด์ง๋ง ๋ชจ๋ ๋์ผํ ์์ ์ ์ํํฉ๋๋ค. ๋ฐ๋ผ์ ์ํ๋ ๊ฒ์ ์ ํํ์ญ์์ค. ์ด๋ป๊ฒ ๊นจ์ง์ง ๊ถ๊ธํฉ๋๋ค.
์ด ํ ๋ก ์์ ์ ๊ฐ ๋์น๊ณ ์๋ ํ ๊ฐ์ง๊ฐ ์์ต๋๋ค.
mongoose๊ฐ ํ์ค ์ฝ์(ES6 ๊ธฐ๋ณธ ๊ตฌํ์ ์๋ฏธํจ)์ ๋ฐํํ๋ ๊ฒฝ์ฐ ES6 ํธํ Promise ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํธํ๋์ด์ผ ํ์ง ์์ต๋๊น? Promise.all([model.query().exec(), ...])
๋ ๋ฌผ๋ก ์ด๊ณ ๋๋ฑํ ๋ ๋ธ๋ฃจ๋ฒ๋ q๋ ํ ์ ์์ต๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์ฝ๋ฐฑ๊ณผ ํ์ค ํ๋ผ๋ฏธ์ค๋ฅผ ๋ฐํํ๊ณ (์ง๊ธ ํ๊ณ ์์ง๋ง ์ฝ์์ "์ ๊ฑฐ"ํ๋ ๊ฒ์ฒ๋ผ) ์ฌ์ฉ์๊ฐ ์ฆ๊ฒจ ์ฌ์ฉํ๋ ํ๋ผ๋ฏธ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋๋ก ํ๋ ๊ฒ์ ์ด๋ป์ต๋๊น? ์๋๋ฉด ๋ด๊ฐ ์ฌ๊ธฐ์ ๋ญ๊ฐ๋ฅผ ๋์น๊ณ ์์ต๋๊น?
@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
๋ค์ดํฐ๋ธ ํ๋ผ๋ฏธ์ค์๋ ์์ง ์์ง๋ง ์์ ์ค์ ๋๋ค. ํ๋ผ๋ฏธ์ค ์์ฑ์ ์ํ ๋น ๋ฅธ ๊ฒฝ๋ก(์ฆ, ํ๋ผ๋ฏธ์ค ์์ฑ์๊ฐ ์๋)๊ฐ ์กด์ฌํ๋ฉด NodeJS๋ ๋ค์ดํฐ๋ธ ํ๋ผ๋ฏธ์ค์ ๋ํด ์ฝ์ด์์ ์ด๋ฅผ ์ง์ํ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค. ์ฌ์ฉ์ ์์ญ์์ _๋น ๋ฅธ_ ์ํ).
mongoose ์ฝ์์ ์ฃผ์ ์์ ์ ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ด mongoose ๋น๋๊ธฐ ์์ ๊ณผ ํจ๊ป yield๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ ๊ฒ์ ๋๋ค.
์ด์จ๋ promise์ ํจ๊ป ์๋ฏธ ์๋ ๋ฐฉ์์ผ๋ก yield
๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ํ์ํฉ๋๋ค. ๋ฐ์ ๊ธฐ๋ฅผ ๋น๋๊ธฐ ํจ์๋ก ํํํ๋ 9 LoC๋ฅผ ์ง์ ์์ฑํ ์ ์๋ค๋ฉด ํ์คํ promisify๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋๋ถ๋ถ์ ์ฌ์ฉ์์ ๊ฐ๋ค๋ฉด ์ด์จ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๋๋ ํ์คํ Mongoose์์ ์ฝ์์ ํ์ฉํ๊ณ ์ถ์/ํ์ํ ๊ฒ์ ์๊ณ ์์ต๋๋ค. ๊ทธ๊ฒ๋ค์ ์์ผ๋ก ๋์๊ฐ ๊ธธ์ด๋ฉฐ ์ธ์ด๊ฐ ํ์ฌ ๋์์ฑ์ ์ํํ๋ ๋ฐฉ๋ฒ์ด์ง๋ง ์์งํ ๋ฐฉ๋ฒ๋ณ๋ก ์๋์ผ๋ก ์ํํ๋ ๊ฒ์ด ๊ณ ํต์ค๋ฌ์ธ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋ฌธ์์ "promise์ ํจ๊ป ์ฌ์ฉ" ๋๋ "์ ๋๋ ์ดํฐ์ ํจ๊ป ์ฌ์ฉ" ์น์ ์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ํํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ฃผ๋ ๊ฒ์ด ๋์์ด ๋ ์ ์์ต๋๋ค.
๋ฌธ์ ๋ ์ด๋ฏธ ๋ฐฉ๋ฒ๋ณ๋ก ์ํํ๊ธฐ ๋๋ฌธ์ ๋ด๋ถ ์ฝ์ ๋ํผ๋ฅผ ์์ ํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. ์ด๋ ์ชฝ์ด๋ 5.0๊น์ง๋ ํต์ฌ์์ ์ฝ์์ ์์ ํ ์ ๊ฑฐํ ์ ์์ต๋๋ค. ๋๋ ๊ทธ๊ฒ์ ๋ ์ด์ ์ฌ์ฉํ์ง ์๋๋ค๋ ์๊ฐ์ ๋์ํฉ๋๋ค. @benjamingr ๋ ๋ด๊ฐ ๋ฉด๋ฐํ ๊ณ ๋ คํด์ผ ํ ๋ช ๊ฐ์ง ์ข์ ์ฃผ์ฅ์ ํ์ง๋ง ๋ค์ ๋จ๊ณ๋ ์ด์จ๋ #2688์ด ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๋น์ ์ ๋ถ๋ช ํ Mongoose์ ๋ํ ๋ ๋ง์ ๊ฒฝํ์ด ์๊ณ ๋ ์ค์ํ ๊ฒ์ ์ฌ์ฉ์์ด๊ธฐ ๋๋ฌธ์ ๊ทธ ์ ํ์ ์ดํดํฉ๋๋ค. ๋ค์ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
๋๋ "its"๋ฅผ ์ ๋ ฅํ์ง๋ง ๋ด iPhone์ "it's"๋ก ์๋ ์์ ๋์ด์ผ ํ๋ค๊ณ ๋๊ผ๊ณ GitHub๋ ์ฃผ์ ํธ์ง์ด ํฅ๋ฏธ๋ก์ด ์ฌ์ฉ ์ฌ๋ก๊ฐ ์๋๋ผ๊ณ ๋๊ผ์ต๋๋ค. ์ด์ค๋๊ธ ์คํธ ์ฃ์กํฉ๋๋ค:)
๋๊ธ ์ค๋ฅธ์ชฝ ์๋จ์ ์ฐํ์ ํด๋ฆญํ๋ฉด ์น์ฌ์ดํธ์ ๋๊ธ์ ์์ ํ ์ ์์ต๋๋ค.
์ ๋ ํญ์ ์ง์ฌ ์ด๋ฆฐ ํ ๋ก , ํนํ ์ ์๊ฒ ์๋ก์ด ๊ฒ์ ๊ฐ๋ฅด์ณ์ฃผ๋ ํ ๋ก ์ ์ด๋ ค ์์ต๋๋ค.
๋ฏธ๋๋ ๊ธฐ๋ณธ ์ฝ์์ ์ํ๋ ๊ฒ ๊ฐ์ต๋๋ค. Mongoose๋ mongo ops์ ์ฐ์ ํ์ค์ด๋ฉฐ ํ์ค ์ฝ์์ ์์กดํ๋ ๊ฒ๋ ์์ ํ ์ ํจํฉ๋๋ค.
ํ์ค ์ฝ์์ ํ์ฐ์ ์ผ๋ก ์ฑ์ํ๊ณ ์ด๋ค ํ๋ ์์ํฌ๋ณด๋ค ๋๋ฆฌ ๋ณด๊ธ๋ ๊ฒ์ ๋๋ค. ๊ทธ๊ฒ๋ค์ ์ฌ์ฉํ๋ ๊ฒธ์ํ +1.
@iliakan ์๋ง๋ ๋ฏธ๋์. 2016๋ ์ค๋ฐ๊น์ง๋ ๊ธฐ๋ณธ ํ๋ผ๋ฏธ์ค๊ฐ "ํ์ค"์ด ๋ ๊ฒ์ผ๋ก ๊ธฐ๋ํ์ง ์์ต๋๋ค. ๋ค์ํ ๋จํธํ๋ ํ๋ผ๋ฏธ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋๋ฌด ๊น์ด ์๋ฆฌ ์ก๊ณ ์๊ณ ๋ฏธ๋ฌํ ๋จ์ ์ด ๋๋ฌด ๋ง์ต๋๋ค. ์ด๋ ์ชฝ์ด๋ , ๋ชฝ๊ตฌ์ค๋ ๋๋์ ์ธ ์ญ์ ๋ณ๊ฒฝ ์์ด '๊ธฐ๋ณธ์ ์ผ๋ก ๊ธฐ๋ณธ'์ผ๋ก ์ ํํ ์ ์์ต๋๋ค.
@vkarpov15 ํ์คํ ์ดํดํฉ๋๋ค.
๊ทธ ๋์ ์ ์ตํ ์ ์๋ ๊ฒ - ์ฝ์๊ณผ ๊ธฐ๋ณธ ์ฝ์ ์ฌ์ด์ ์ฃผ์ ๋นํธํ์ฑ์ ๊ฐ๋ตํ๊ฒ ์ค๋ช
ํ๋ ๊ฐ๋จํ ํ์ด์ง์
๋๋ค. ์ ์ด๋ mpromise
๋ก ์๋ํด์๋ ์ ๋๋ ๊ฒ๋ค ;)
์ง๊ธ ๋น์ฅ์ catch
๊ฐ ์๋ค๋ ๊ฒ์ ์ดํดํฉ๋๊น? ๊ทธ๊ฒ์ด ๋ชจ๋ ์ ํ ์ฌํญ์
๋๊น?
ES6 API์ ๋ํด ์์ธํ ์์๋ณด์ง ๋ชปํ์ต๋๋ค. mpromise๋ Promises/A+ ๋ฅผ ๊ตฌํํ๊ณ .catch (), ๊ธด ์คํ ์ถ์ ๋ฑ์ ์๋ฏธํ์ง ์์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก .then()
๊ฐ ์๋ ๋ชจ๋ ๊ฒ์ mpromise์ ๊ตฌํ ๋ฒ์๋ฅผ ๋ฒ์ด๋ฉ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก Promises/A+๋ฅผ ๊ตฌํํ๋ ๊ฒ์ ๋์ ์์ค์ ๊ด์ ์์ ES6 promise๋ ๊ตฌํํ์ง๋ง ๊ทธ ๋ฐ๋๋ ์ฌ์ค์ด ์๋๋๋ค. Promises/A+๋ ์ ์์ค ๊ตฌํ ์ธ๋ถ ์ฌํญ์ ๋ํด ๋งค์ฐ ๊ตฌ์ฒด์ ์ ๋๋ค. ์๋ฅผ ๋ค์ด, bluebird๋ Promises/A+๋ฅผ ์ ํํ ๋ฐ๋ฅด์ง ์์ผ๋ฉฐ ๋ค๋ฅธ ์ผ๋ฐ์ ์ธ promise ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํด์๋ ํ์คํ์ง ์์ง๋ง ์ฌ์์ ์ค์ํ์ง ์๋๋ค๊ณ ํ์ ํฉ๋๋ค. ๊ทธ๋ค๋ง์ ๋ ํนํ ๋ฐฉ์. ์ด๊ฒ์ด ์ด๊ฒ์ ํนํ ๊น๋ค๋กญ๊ฒ ๋ง๋๋ ๊ฒ์ ๋๋ค.
์ด์ ๋ธ๋ฃจ๋ฒ๋์ ๋ค์ดํฐ๋ธ ํ๋ผ๋ฏธ์ค๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๊น?
๋ค require('mongoose').Promise = global.Promise
๋ ๋ชฝ๊ตฌ์ค๊ฐ ๋ค์ดํฐ๋ธ ํ๋ผ๋ฏธ์ค๋ฅผ ์ฌ์ฉํ๊ฒ ํฉ๋๋ค. ๋ชจ๋ ES6 ์ฝ์ ์์ฑ์๋ฅผ ์ฌ์ฉํ ์ ์์ด์ผ ํ์ง๋ง ์ง๊ธ์ ๋ค์ดํฐ๋ธ, ๋ธ๋ฃจ๋ฒ๋ ๋ฐ Q ๋ก๋ง ํ
์คํธํฉ๋๋ค.
@vkarpov15 ๋ฉ์ง๋ค์ ! ์ ๋ง ๊ณ ๋ง์ต๋๋ค!
@vkarpov15 ๊ฐ์ฌํฉ๋๋ค! ์ ํ์ด!
๋ค, ํ์คํ. ์ ๋ง ๋ฉ์ง๋ค์! :)
@vkarpov15 ์ ๋ง ๋ฉ์ง๋ค์
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋ค
require('mongoose').Promise = global.Promise
๋ ๋ชฝ๊ตฌ์ค๊ฐ ๋ค์ดํฐ๋ธ ํ๋ผ๋ฏธ์ค๋ฅผ ์ฌ์ฉํ๊ฒ ํฉ๋๋ค. ๋ชจ๋ ES6 ์ฝ์ ์์ฑ์๋ฅผ ์ฌ์ฉํ ์ ์์ด์ผ ํ์ง๋ง ์ง๊ธ์ ๋ค์ดํฐ๋ธ, ๋ธ๋ฃจ๋ฒ๋ ๋ฐ Q ๋ก๋ง ํ ์คํธํฉ๋๋ค.