# Mongoose メソッド

GROWI でよく使われるMongooseのメソッドに関して、、、
``` js
await user.deleteImage();
```
などと`Promise`が返ってくるの期待するので、この`user.deleteImage()`がしっかりと`Promise`オブジェクトを返すように設計、っと思っているでしょう
（` return new Promise((resolve, reject) => {});`）。

実際に`user.deleteImage();`をみてみよう
``` js
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 参考）。`undefined`はcallbackに使うときだけだから、この場合では`Promise`を返すことがわかる。Mongooseのメソッドに関して他をみると、結構`Promise`返すメソッドが多いようですね。すると、新しく`Promise`オブジェクトを作成してそれ自体をリターンするといった流れは不要になる。

---

## Page Navigation

- Canonical URL: https://dev.growi.org/資料/開発ガイドライン/Mongooseメソッド
- Permalink: https://dev.growi.org/5cff5ed49f29ed003e5d2987
- Parent: [開発ガイドライン](/5cff50c29f29ed003e5d2984.md)
- Children: 0 total
- Total descendants: 0
- Siblings: 12 total
  - [ADR - Architecture Decision Record](/6522ae62c305143ea046a16e.md)
  - [Field制限に関するModel層での責務について](/5f3e0b4e21b23d00487da698.md)
  - [Modernize](/5f74fad16711480049ff1938.md)
  - [Next.js 化](/5f7ad6de2906df004819a9af.md)
  - [PaginationWrapperを使いたい](/5d1dc3608c18400041e56649.md)
  - [SWRによるグローバルステート＆カスタムhooks](/637355d1c29dff4657eb5e2d.md)
  - [USER_PUBLIC_FIELDS の扱いについて](/605016625ea133004833567e.md)
  - [i18n](/5eca4d8e7bc0b20049fd2760.md)
  - [デザイン規定とポリシー](/5ed49039abdc3e0048a2256d.md)
  - [モデルインターフェースのTypescript化](/61ea77b416b45b44403d246d.md)
  - [動作確認タスクの進め方](/5ee18e85615ff10048fac7a4.md)
  - [英語表記基準](/5cefa1ca927e6e003e203577.md)
- Last updated: 2019-06-12T05:36:27.238Z by okas
- Full page listing (all children regardless of count): https://dev.growi.org/_api/v3/page-listing/children?id=5cff5ed49f29ed003e5d2987
