JavaScript でオブジェクトの構築中に非同期操作を処理するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-11-28 02:09:10
オリジナル
460 人が閲覧しました

How Can I Handle Asynchronous Operations During Object Construction in JavaScript?

コンストラクターで async/await を使用できません: 非同期オブジェクト構築の回避策

問題: 内で async/await 構文を使用しようとしていますコンストラクター関数により、「クラス コンストラクターは非同期ではない可能性があります」というエラーが発生しますmethod."

原因: 非同期関数は Promise を返しますが、コンストラクターは構築中のオブジェクトを返します。これにより競合が発生し、async/await とコンストラクターの両方を同時に利用できなくなります。

回避策:

1.初期化関数 (init()):

  • クラス内に init() 関数を作成します。
  • コンストラクターは init() を呼び出します。これにより、非同期が可能になります。操作。
  • 使用法:

    var myObj = new myClass();
    myObj.init(function() {
      // Use myObj within the callback
    });
    ログイン後にコピー
  • 実装:

    class myClass {
      constructor () {
      }
      init (callback) {
          // Asynchronous operations and callback
      }
    }
    ログイン後にコピー

2.ビルダー パターン:

  • コンストラクターは直接呼び出すとエラーをスローします。
  • 静的な build() メソッドは、 object.
  • 使用法:

    myClass.build().then(function(myObj) {
      // Use myObj
    });
    
    async function foo () {
      var myObj = await myClass.build();
    }
    ログイン後にコピー
  • 実装:

    class myClass {
      constructor (async_param) {
          if (async_param === undefined) {
              throw new Error('Cannot be called directly');
          }
      }
      static build () {
          return doSomeAsyncStuff()
                 .then(function(async_result){
                     return new myClass(async_result);
                 });
      }
      // Async/await equivalent:
      static async build () {
          var async_result = await doSomeAsyncStuff();
          return new myClass(async_result);
      }
    }
    ログイン後にコピー

注: ビルダーは代わりにコールバックを使用できます。 Promise.

静的関数内での関数の呼び出し:

  • 静的関数は (インスタンス メソッドとは異なり) オブジェクトにバインドされません。
  • したがって、これは、インスタンス化されたオブジェクトではなく、クラスを参照します。
  • To静的関数からインスタンス メソッドを呼び出し、通常の関数または静的メソッドのいずれかにします。

    class A {
      static foo () {
          bar1();   // OK
          A.bar2(); // OK
      }
      static bar2 () {}
    }
    function bar1 () {}
    ログイン後にコピー

以上がJavaScript でオブジェクトの構築中に非同期操作を処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート