首頁 > web前端 > js教程 > 主體

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語法建構子引發錯誤「類別建構子可能不是非同步的方法。」

原因: 非同步函數傳回 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() 方法返回一個承諾
  • 用法:

    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);
      }
    }
    登入後複製

注意: 建構者可以使用回調來取代

在靜態函數中呼叫函數:

  • 靜態函數不綁定到物件(與實例方法不同)。
  • 因此, this 指的是類,而不是實例化的物件。
  • 呼叫實例方法靜態函數,使它們要麼是常規函數,要麼是靜態方法。

    class A {
      static foo () {
          bar1();   // OK
          A.bar2(); // OK
      }
      static bar2 () {}
    }
    function bar1 () {}
    登入後複製

以上是JavaScript 物件建構過程中如何處理非同步操作?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板