Mongoose メソッド
GROWI でよく使われるMongooseのメソッドに関して、、、
await user.deleteImage();
などとPromise
が返ってくるの期待するので、このuser.deleteImage()
がしっかりとPromise
オブジェクトを返すように設計、っと思っているでしょう
( return new Promise((resolve, reject) => {});
)。
実際にuser.deleteImage();
をみてみよう
userSchema.methods.deleteImage = async function() { validateCrowi(); const Attachment = crowi.model('Attachment'); // the 'image' field became DEPRECATED in v3.3.8 this.image = undefined; if (this.imageAttachment != null) { Attachment.removeWithSubstanceById(this.imageAttachment._id); } this.imageAttachment = undefined; return this.save(); };
うーむ、この時点ではthis.save()
がPromise
であるかというと微妙なところかな。
そしたら!
this.save()
はMongooseのメソッドで、Promise
またはundefined
を返してるみたい(https://mongoosejs.com/docs/api.html#model_Model-save external_link 参考)。undefined
はcallbackに使うときだけだから、この場合ではPromise
を返すことがわかる。Mongooseのメソッドに関して他をみると、結構Promise
返すメソッドが多いようですね。すると、新しくPromise
オブジェクトを作成してそれ自体をリターンするといった流れは不要になる。