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オブジェクトを作成してそれ自体をリターンするといった流れは不要になる。