daisei-yoshino
@daisei-yoshino

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

awaitしてもメソッドチェーンしたい

Q&A

Closed

解決したいこと

内部にawaitを含んでいるasync関数を持つclassでメソッドチェーンをできるようにしたいのですが、思いつく範囲では上手くいかなさそうです…。

basicClass.js
// 実際のコードでは親クラスが存在しており、これも影響を及ぼしている可能性があるのでそれらしく書いておきます
export default class basicClass {
  /**
   * 親クラスのreturn thisする関数
   * @returns{Promise<this>}
   */
  async hoge() {
    await aPromiseMethod();
    return this;
  }
}

fugaClass.js
import basicClass from './basicClass.js';

export default class FugaClass extends basicClass {
  constructor () {
    super();
  }

  /**
   * メソッドA
   * @returns {Proimise<this>}
   */
  async methodA() {
    await anyPromiseMethod();
    return this;
  }

  /**
   * メソッドB
   * @returns {Promise<this>}
   */
  async methodB() {
    await somePromiseMethod();
    return this;
  }
}

whatIWantToDo.js
import FugaClass from './fugaClass.js';

const fuga = new FugaClass();
// これをしたいが上手くいかなさそう
await fuga
  .methodA()
  .methodB();

発生している問題・エラー

この問題が起こるコードが超巨大で、実行してエラーを出すまで(あまりにも怖くて)やっていませんが、とりあえず現状ではメソッドチェーンの後ろ側の関数について型ヒントが出ない状態でした。

自分で試したこと

実際上記のコードを書いてみましたが…VSCodeで型ヒントが出てこないのが怖かったので一旦作業停止しています。

0

1Answer

…もしかしての憶測ですが、

await (await fuga.methodA()).methodB();

が答えだったりするのでしょうか…?

0Like

Your answer might help someone💌