Mongoose: рдореЙрдбрд▓ рд╕реЗрд╡ рдСрдкрд░реЗрд╢рди рдореЗрдВ 'рд╡рд╛рджрд╛' рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рдЬреЛрдбрд╝реЗрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 16 рдЕрдкреНрд░реИрд▓ 2013  ┬╖  50рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: Automattic/mongoose

рдСрдкрд░реЗрд╢рди рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рджрд╛ рд╡рд╛рдкрд╕реА рд╕рдорд░реНрдерди рдЬреЛрдбрд╝реЗрдВ, рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИред рд╕рддреНрдпрд╛рдкрди рдФрд░ рд╕реЗрд╡ рд╕реНрдЯреЗрдЯ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрдИ рд░рд┐рдЯрд░реНрди рдкрде рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдпрд╣ рдиреЗрд╕реНрдЯрд┐рдВрдЧ рдХреЗ рдмрдЬрд╛рдп .then() рдХреЗ рд╕рд╛рде рдХрдИ рд╕реЗрд╡ рдСрдкрд░реЗрд╢рдВрд╕ рдХреЛ рдЪреЗрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдЕрднреА рдХреЗ рд▓рд┐рдП рдореИрдВ рдпрд╣ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ:

userSchema.methods.saveAsync = function() {
  return new Promise((resolve,reject) => {
    this.save((err) => {
      if(err) return reject(err)
      resolve()
    })
  })
}

рд╕рднреА 50 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореИрдВ рдЗрд╕реЗ 4.x рдХреА рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реВрдВред рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ рдХрд┐ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (hooks.js)ред

рдмрд╣реБрдд рдЕрдЪреНрдЫреЗ рдзрдиреНрдпрд╡рд╛рджред рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдиреЗрд╡рд▓рд╛ рдкреНрд░реЙрдорд┐рд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ jquery's .when рдХрд╛ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИред рдХреНрдпрд╛ рдРрд╕рд╛ рдХреБрдЫ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЖрдк рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ?

рд╡рд░ p1 = Users.find ();
рд╡рд░ p2 = Animals.find ();
рдкреНрд░реЙрдорд┐рд╕ред рдЬрдм (рдкреА 1, рдкреА 2)ред рдПрдбрдмреИрдХ (рдлрд╝рдВрдХреНрд╢рди (рдЧрд▓рддреА, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛, рдЬрд╛рдирд╡рд░) {
//рдЖрджрд┐
});

рдЬреА рдирд╣реАрдВ, рдзрдиреНрдпрд╡рд╛рджред рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдирд╣реАрдВ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рдЬреЛ рдиреЗрд╡рд▓реЗ рдХреЗ рдмрд╛рд╣рд░ рд▓рд╛рдЧреВ рдХреА рдЬрд╛ рд╕рдХреЗрдВред рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдлреВрд▓рд╛ рд╣реБрдЖ рд╣реИред

рджреВрд╕рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдпрд╣ рдзрд╛рдЧрд╛ рдвреВрдВрдврддреЗ рд╣реИрдВ, рдпрд╣рд╛рдВ рдпрд╣ рд╣реИ: https://github.com/wshaver/mongoosewhen

@wshaver npm рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░реЗрдВ рдФрд░ рдПрдХ рдиреЗрд╡рд▓рд╛ рдЯреИрдЧ рдЬреЛрдбрд╝реЗрдВ рддрд╛рдХрд┐ рдпрд╣ http://plugins.mongoosejs.com рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗ

рдирд╛рдо рдореЗрдВ рдбреИрд╢ рдХреЗ рдЕрдиреНрдп Mongoose рдкреНрд▓рдЧрдЗрди рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдЕрдиреБрд░реВрдк рдпрд╣рд╛рдВ рд▓реЗ рдЬрд╛рдпрд╛ рдЧрдпрд╛: https://github.com/wshaver/mongoose-when

рдПрдирдкреАрдПрдо рдХреЛ рдкреНрд░рдХрд╛рд╢рд┐рдд, рдЯреИрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдЕрднреА рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗ рд░рд╣рд╛ рд╣реИ рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рджреЗрд░реА рд╣реЛ рд░рд╣реА рд╣реИред

@ рд╡рд╛рд╢реЗрд╡рд░ рдХреВрд▓ред рдпрд╣ рджрд┐рди рдореЗрдВ рдПрдХ рдмрд╛рд░ рдЕрдкрдбреЗрдЯ рд╣реЛрддрд╛ рд╣реИред

#1446 рдореЗрдВ рдЦреБрджрд╛рдИ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ "hooks.js" рдХреЛ рд╣рдЯрд╛рдП рдмрд┐рдирд╛ рдЗрд╕реЗ рд╣рд╛рд╕рд┐рд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред
рд╣рд░реА рдмрддреНрддреА?

рдЗрд╕рдХреЗ рд▓рд┐рдП рдЬрд╛рдУ

рд╕реЛрдорд╡рд╛рд░, 7 рдЕрдХреНрдЯреВрдмрд░, 2013 рдХреЛ, рд░реЗрдлреЗрд▓ рдПрдХрд░рдореИрди рдиреЗ рд▓рд┐рдЦрд╛:

#1446 https://github.com/LearnBoost/mongoose/issues/1446 рдореЗрдВ рдЦреБрджрд╛рдИ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ "hooks.js" рдХреЛ рд╣рдЯрд╛рдП рдмрд┐рдирд╛ рдЗрд╕реЗ рд╣рд╛рд╕рд┐рд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред
рд╣рд░реА рдмрддреНрддреА?

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ Gi tHub рдкрд░ рджреЗрдЦреЗрдВhttps://github.com/LearnBoost/mongoose/issues/1431#issuecomment -25792310
.

рд╣рд╛рд░реВрди
@aaronheckmann https://twitter.com/#!/aaronheckmann
Soundcloud.com/ajhecky
github.com/aheckmann

рдмрд┐рдЧ рдкреАрдЖрд░ рддреИрдпрд╛рд░

рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореЗрд░реА рднреА рдорджрдж рдХрд░реЗрдЧрд╛ред myDoc.save().exec() рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП - рдЗрд╕рд▓рд┐рдП рдореВрд▓ рд░реВрдк рд╕реЗ рд╕реЗрд╡ рдХреЛ рдПрдХ рдХреНрд╡реЗрд░реА рд╡рд╛рдкрд╕ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╛ рдХреНрдпрд╛ рдХрд╛рд░рдг рд╣реИ, рдХрд┐ рд╕рд╣реЗрдЬреЗрдВ рдХреЛрдИ рдкреНрд░рд╢реНрди рдирд╣реАрдВ рд▓реМрдЯрд╛рддрд╛ рд╣реИ?

рдпрджрд┐ рд╣рдо рдХреЙрд▓рдмреИрдХ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ рддреЛ рд╡рд╛рджрд╛ рд╡рд╛рдкрд╕реА рдХреЗ рд▓рд┐рдП +1

рдлрд┐рдХреНрд╕ master рд╢рд╛рдЦрд╛ рдореЗрдВ рд╣реИ, рдЬрд┐рд╕реЗ 3.10 рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рд╣реИред

рдХреНрдпрд╛ рдЗрд╕рдореЗрдВ рдореЙрдбрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдПрдХ рд▓реМрдЯрд╛ рд╣реБрдЖ рд╡рд╛рджрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ?

@GDownes create() рдкрд╣рд▓реЗ рд╣реА рдПрдХ рд╡рд╛рджрд╛ рд▓реМрдЯрд╛ рдЪреБрдХрд╛ рд╣реИ :) http://mongoosejs.com/docs/api.html#model_Model.create

3.10 рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдирд┐рдпреЛрдЬрд┐рдд рд░рд┐рд▓реАрдЬ рдХреА рддрд╛рд░реАрдЦ? :)

@swayf 4.0 рдЕрднреА рднреА рдХреБрдЫ рдорд╣реАрдиреЗ рдмрд╛рд╣рд░ рд╣реИред рд░реЗрдд рдореЗрдВ рдореЗрд░реА рд▓рд╛рдЗрди 2 рд╕рд┐рддрдВрдмрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ :)

рдХреНрдпрд╛ рдпрд╣ рдЕрднреА рднреА рдПрдХ рдЖрдЧрд╛рдореА рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реИ?

рд╣рд╛рдБ, рдпрд╣ 4.0 рдореЗрдВ рд╣реЛрдЧрд╛, рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЕрднреА рднреА рдЗрд╕рдХреЗ рд▓рд┐рдП рд░рд┐рд▓реАрдЬрд╝ рдХреА рддрд╛рд░реАрдЦ рдирд╣реАрдВ рд╣реИред рдЕрдВрддрд┐рдо рдЕрдиреБрдорд╛рди рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╣реА рдирд╣реАрдВ рдерд╛ :(

:+1:

+1 рдХреНрдпреЛрдВрдХрд┐:

рдореБрдЭреЗ рд╣реБрдХ рд╕реЗ рдкрд╣рд▓реЗ рдореЛрдЪрд╛ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ 2 рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреЛ рд╕рд╣реЗрдЬрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ, рдФрд░ рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдореБрдЭреЗ рджреЛрдиреЛрдВ рдореЙрдбрд▓реЛрдВ рдХреЗ рд╕рд╣реЗрдЬреЗ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж done() рдХреЙрд▓рдмреИрдХ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧреАред

рдореИрдВрдиреЗ Collection.insert([docs], done) рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдпрд╣ Schema.pre('save') рддрд░реНрдХ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдХреБрдЫ рдорд╛рдиреЛрдВ рдХреЛ рд╣реИрд╢ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

@arathael рдЖрдк рдЕрдкрдиреЗ рджреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреЛ async.parallel рдореЗрдВ рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрд╢рд╛ async рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХреЙрд▓рдмреИрдХ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

рдзрдиреНрдпрд╡рд╛рдж рдЖрджрдореА, рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдм рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВ рдмрд╕ рдЗрд╕рд▓рд┐рдП рдХреВрдж рдЧрдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ ODM рд╕реЗ рдореВрд▓ рд╕рдорд░реНрдерди рд╣рд┐рд▓ рдЬрд╛рдПрдЧрд╛ред

+1

рдореИрдВ 6to5 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ ES7 рдкреНрд░рддреАрдХреНрд╖рд╛/async рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдЕрдЧрд░ record.save() рдиреЗ рдХреЛрдИ рд╡рд╛рджрд╛ рд╡рд╛рдкрд╕ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдореИрдВ рдпрд╣ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ:

try {
  await record.save()
} catch(err) {
  ...
}

рдЕрднреА рдХреЗ рд▓рд┐рдП рдореИрдВ рдпрд╣ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ:

userSchema.methods.saveAsync = function() {
  return new Promise((resolve,reject) => {
    this.save((err) => {
      if(err) return reject(err)
      resolve()
    })
  })
}

+1 @aaronshaf рдХреЗ рд▓рд┐рдП, рдореЗрд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдореИрдВ рдЗрд╕реЗ ES5 рдореЗрдВ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рднреА рд▓рд┐рдЦреВрдВрдЧрд╛ рдЬреЛ ES6 рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдзрдиреНрдпрд╡рд╛рдж

рдпрд╣рд╛рдБ рдореИрдВрдиреЗ рдЕрднреА рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдХрд┐рдпрд╛ рд╣реИред рдЬрд╛рд╣рд┐рд░ рд╣реИ рдХрд┐ рдХреНрдпреВ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИ рд▓реЗрдХрд┐рди рдореИрдВ рдХрд╣реАрдВ рдФрд░ рд╡рд╛рджреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддрд╛ рд╣реВрдВред

/*
 * Hack until mongoose 3.10 comes out. See this: https://github.com/LearnBoost/mongoose/issues/1431
 */
mongoose.Document.prototype.savePromise = function () {
    var that = this;
    return Q.Promise(function(resolve, reject) {
        that.save(function (err, item, numberAffected) {
            if (err) {
                reject(err);
            }
            resolve(item, numberAffected);
        });
    });
};

mongoose.Document.prototype.removePromise = function () {
    var that = this;
    return Q.Promise(function(resolve, reject) {
        that.remove(function (err, item) {
            if (err) {
                reject(err);
            }
            resolve(item);
        });
    });
};

рд╣реИрдХ @jhullfly рдкрд░ +1 рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпреВ рдХрд╛ рд╕рдВрдХрд▓реНрдк рдХреЗрд╡рд▓ рдПрдХ рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рднрд╛рд╡рд┐рдд рдЫреЛрдбрд╝ рджреА рдЬрд╛рддреА рд╣реИ, рдЙрдиреНрд╣реЗрдВ рджреЛрдиреЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕рд░рдгреА рдпрд╛ рдХреБрдЫ рдореЗрдВ рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ:

mongoose.Document.prototype.savePromise = function () {
    var that = this;
    return Q.Promise(function(resolve, reject) {
        that.save(function (err, item, numberAffected) {
            if (err) {
                reject(err);
            }
            resolve([item, numberAffected]);
        });
    });
};

1+ рд╕реЗрд╡ рд╕реЗ рд▓реМрдЯрд╛рдП рдЬрд╛ рд░рд╣реЗ рд╡рд╛рджреЗ рдХреЗ рд▓рд┐рдП!

рдЕрдм save 4.0.1 рдореЗрдВ рд╡рд╛рджрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдЪреАрдпрд░реНрд╕ред

+1

@arathael +1

рдХреНрдпрд╛ рд╡рд╛рджреЛрдВ рдХреЗ рд╕рд╛рде save рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рджрд╕реНрддрд╛рд╡реЗрдЬ рд╣реИрдВ?

рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рдерд╛:

var User = mongoose.model('User');
var u = new User();
u.save().then(function() {
// never gets here.
});
// I even tried the following, and neither works.
u.save().then(function() {}).end();

рдХреНрдпрд╛ рдЖрдк рдиреЗрд╡рд▓рд╛ 4.0.1 рдкрд░ рд╣реИрдВ рдФрд░ рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЗрд╕реЗ npm рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ?

@Ouwen рд╣рд╛рдБ, рдореИрдВ 4.0.1 рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реВрдБ рдФрд░ рд╣рд╛рдБ рдореИрдВрдиреЗ рдХрд┐рдпрд╛ рдпрд╛ рдирд╣реАрдВ рддреЛ рдореБрдЭреЗ рдПрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реА рд╣реЛрдЧреА рдпрджрд┐ рдиреЗрд╡рд▓рд╛ рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ then рдХреЛ рдХрднреА рднреА рдХреЙрд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореБрдЭреЗ рдкреВрд░рд╛ рдпрдХреАрди рд╣реИ рдХрд┐ рдореИрдВ рдХреБрдЫ рдЕрдЬреАрдм рдХрд░ рд░рд╣рд╛ рд╣реВрдВ (рдпрд╛ рдлрд┐рд░ рдмрдЧ рдЬрд▓реНрджреА рд╕реЗ рджрд╛рдпрд░ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ), рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдирд╣реАрдВ рдмрддрд╛ рд╕рдХрддрд╛, рдпрд╣реА рд╡рд╣ рд╣реИ рдЬреЛ рдореИрдВ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕реБрдХ рд╣реВрдВ рдХрд┐ рдЗрд╕рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреЛрдИ рдЙрджрд╛рд╣рд░рдг/рджрд╕реНрддрд╛рд╡реЗрдЬ рд╣реИ рдпрд╛ рдирд╣реАрдВред

рд╣рдореНрдо, рдмрд╣реБрдд рдЕрдЬреАрдмред рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ 3.8.8 рдЪрд▓рд╛ рд░рд╣рд╛ рдерд╛ рдФрд░ рдЗрд╕реЗ 4.0.1 рддрдХ npm install рдХрд░рдирд╛ рднреВрд▓ рдЧрдпрд╛ рдерд╛, рдпрд╣реА рд╡рдЬрд╣ рд╣реИ рдХрд┐ u.save() рд╕реЗ рдПрдХ рд╡рд╛рджрд╛ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдЖрдкрдиреЗ рдЬреЛ рд▓рд┐рдЦрд╛ рд╣реИ рд╡рд╣ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

@limianwang рдХреНрдпрд╛ рдЖрдк рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдПрдХ рдореЛрдВрдЧреЛрдбрдм рд╕рд░реНрд╡рд░ рд╕реЗ рдЬреБрдбрд╝ рд░рд╣реЗ рд╣реИрдВ? рдХреНрдпрд╛ рдЖрдк рдореБрдЭреЗ рдПрдХ рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕реЗ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ?

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ .save () рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдпрд╛ рдЧрдпрд╛ рд╡рд╛рджрд╛ рд╡рд╕реНрддреБ рдЕрдиреНрдп рд╡рд╛рджреЛрдВ рдХреЗ рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИ, рдпрд╣ onReject рдХреЗ рдмрдЬрд╛рдп рдкрдХрдбрд╝/рдкрдХрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИред

рдиреЗрд╡рд▓рд╛ 4.1.10 рдФрд░ ...

var u = new User();
u.save().then(...)

рдлрд┐рд░ рднреА рд╡рд╛рджрд╛ рдирд╣реАрдВ рд▓реМрдЯрд╛рддрд╛

@xrado рдХреГрдкрдпрд╛ рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд░реЗрдВред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рд╣реИрдВ рдХрд┐ рдиреЗрд╡рд▓рд╛ 4.1.10 рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

@ vkarpov15 рдореЗрд░рд╛ рдмреБрд░рд╛, рдореИрдВрдиреЗ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ рдФрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ .. рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдореИрдВ рдкрд╣рд▓реЗ рдХреНрдпрд╛ рдХрд░ рд░рд╣рд╛ рдерд╛ ..рдХреНрд╖рдорд╛ рдХрд░реЗрдВ

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ, рд╕рд╣реЗрдЬреЗрдВ рдбреЗрдЯрд╛ рдХреЛ рддреБрд░рдВрдд рдбреАрдмреА рдореЗрдВ рд╕рд╣реЗрдЬрддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдХреЛрдб рдХреЛ рдХреЙрд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЕрдЬреАрдм рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдХреЛрдб рдХреА рдПрдХ рдФрд░ рд╢рд╛рдВрддрд┐ рдереА рдЬрд┐рд╕рдиреЗ рддрддреНрдХрд╛рд▓реАрди рдмреНрд▓реЙрдХ рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдФрд░ рд╡рд╛рджрд╛ рдХрд╛рдо рдХрд┐рдпрд╛ред

рдХреЛрдб (user.save() рднрд╛рдЧ рдЗрд╕реЗ рд╕рд╣реЗрдЬрддрд╛ рд╣реИ, рдлрд┐рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдХрднреА рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ)

user.save ()ред рддрдм (рдлрд╝рдВрдХреНрд╢рди (userX) {// рд╕реЗрд╡ рд╡рд░реНрдХреНрд╕
рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ(2); // рдЗрд╕реЗ рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ
}).end()//рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ
рддрдм (рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд, рдлрд╝рдВрдХреНрд╢рди (рдЧрд▓рддреА) {
рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ ('рдЧрд▓рддреА:' + рддреНрд░реБрдЯрд┐); // рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ
});

рдЕрджреНрдпрддрди рдореИрдВрдиреЗ рдкреБрд░рд╛рдиреЗ рддрд░реАрдХреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдФрд░ рдпрд╣ рдЗрд╕ рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

user.save (рдлрд╝рдВрдХреНрд╢рди (рдЧрд▓рддреА, рдирдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛) {
рдЕрдЧрд░ (рдЧрд▓рддреА) рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ ('рдЧрд▓рддреА =' + рддреНрд░реБрдЯрд┐);
рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ ('рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рд╣реЗрдЬрд╛ рдЧрдпрд╛');
});

рдбрдмреНрд▓реНрдпреВрдЯреАрдПрдл: рд╕рдорд╛рдзрд╛рди рдХреЗрд╡рд▓ рдиреЗрд╡рд▓рд╛ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ "3.8.X" рд╕реЗ ^ 4.1.9 рдореЗрдВ рдмрджрд▓рдирд╛ рдерд╛ред

рдлрд┐рд░ user.save().then(function(userX) {// рд╕реЗрд╡ рд╡рд░реНрдХреНрд╕
рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ(2);
})редрд╕рдорд╛рдкреНрдд()
рддрдм (рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд, рдлрд╝рдВрдХреНрд╢рди (рдЧрд▓рддреА) {
рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ ('рдЧрд▓рддреА:' + рддреНрд░реБрдЯрд┐);
});

рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ !!!!!!!!!!! рдорд┐рдард╛рдИ....

@nickjohngray рдЦреБрд╢реА рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдЗрд╕реЗ рд╕рдордЭ рд▓рд┐рдпрд╛ :) рдореИрдВ рджреГрдврд╝рддрд╛ рд╕реЗ рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдиреЗрд╡рд▓рд╛ рдХреЗ рд╕рд╛рде рд╡рд╛рджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЬрд╛рд░реА рд░рдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдкрд░ рд╡рд╛рджреЗ рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛ рдкрдврд╝реЗрдВ - рдЪрд┐рдВрддрд╛ рди рдХрд░реЗрдВ, рдпрд╣ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдкрдарди рд╣реИред

Im рдПрдХ рд╣реА рдореБрджреНрджрд╛ рд╣реИ ... рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдореБрдЭреЗ рдПрдХ рд╡рд╛рджреЗ рдХреЗ рдЕрдВрджрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдЪрдд рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдкреВрд░реНрдг рдкреНрд░рдореБрдЦ рд░рд┐рд▓реАрдЬрд╝ рдХреЛ рдбрд╛рдЙрдирдЧреНрд░реЗрдб рдирд╣реАрдВ рдХрд░рдирд╛ рдкрдбрд╝реЗрдЧрд╛ред

@ jhyland87 рдХреГрдкрдпрд╛ рдХреЛрдб рдирдореВрдиреЗ рдкреНрд░рджрд╛рди рдХрд░реЗрдВ рддрд╛рдХрд┐ рдореИрдВ рджреЗрдЦ рд╕рдХреВрдВ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХреНрдпрд╛ рд╣реИред

@vkarpov15 рдореИрдВрдиреЗ рдХрд┐рдпрд╛, рдЯрд┐рдХрдЯ рдореЗрдВ

рджреВрд╕рд░реЗ рдЯрд┐рдХрдЯ рдореЗрдВ рдпреЗ рдерд╛ рдлрд┐рдХреНрд╕...

рдореВрд▓ рд░реВрдк рд╕реЗ, рдпрд╣ рдХреЛрдб:

var User = mongoose.model('User');
var u = new User();
u.save().then(function() {
// never gets here.
});

рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╕рд╣реЗрдЬрддреЗ рд╕рдордп рдмрд╕ рдПрдХ return рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП .. рдЗрд╕рд▓рд┐рдП:

var User = mongoose.model('User');
var u = new User();
return u.save().then(function() {
// never gets here.
});

@ jhyland87 , FYI рдХрд░реЗрдВ - рдиреЗрд╡рд▓рд╛ рдХреЗ рд╕рд╛рде рд╡рд╛рджреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдгред

рдХреНрдпрд╛ рдпрд╣ рдЕрднреА рднреА рдПрдХ рдореБрджреНрджрд╛ рд╣реИ?

рдореЗрд░реЗ рдкрд╛рд╕ рдирд┐рдореНрди рдХреЛрдб рд╣реИ (рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) ...

User.findById(id)
.exec()
.then((user) => {
  user.name = 'new name from wherever!';
  return user.save();
})
.then((user) => {
  // want to do more stuff with the user object once it has been saved successfully...
  // ... but it never makes it here!!!
};

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬрдм рдореИрдВ save() рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдПрдХ рдЦрд╛рд▓реА рдХреЙрд▓рдмреИрдХ рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВ, рддреЛ рд╕рдм рдареАрдХ рд▓рдЧрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ...

User.findById(id)
.exec()
.then((user) => {
  user.name = 'new name from wherever!';
  return user.save(() => {
    // unwanted empty callback... hmmm?
  });
})
.then((user) => {
  // we made it here!!! but now...
  // user === undefined :(
};

рдХреНрдпрд╛ рдЖрдк рдПрдордкреНрд░реЛрдорд┐рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ? mongoose.Promise = global.Promise; . рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

Soviut picture Soviut  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

gustavomanolo picture gustavomanolo  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

weisjohn picture weisjohn  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

varunjayaraman picture varunjayaraman  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

AraanBranco picture AraanBranco  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ