Rumah >hujung hadapan web >tutorial js >Bagaimanakah Saya Boleh Mengendalikan Operasi Asynchronous Semasa Pembinaan Objek dalam JavaScript?

Bagaimanakah Saya Boleh Mengendalikan Operasi Asynchronous Semasa Pembinaan Objek dalam JavaScript?

Linda Hamilton
Linda Hamiltonasal
2024-11-28 02:09:10466semak imbas

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

Tidak boleh menggunakan tak segerak/menunggu dalam pembina: Penyelesaian untuk Pembinaan Objek Asynchronous

Masalah: Percubaan untuk menggunakan sintaks tak segerak/menunggu dalam fungsi pembina menimbulkan ralat "Pembina kelas mungkin bukan async kaedah."

Punca: Fungsi Async mengembalikan janji, manakala pembina mengembalikan objek yang sedang dibina. Ini mewujudkan konflik, menjadikannya mustahil untuk menggunakan kedua-dua async/menunggu dan pembina secara serentak.

Penyelesaian:

1. Fungsi Permulaan (init()):

  • Buat fungsi init() dalam kelas.
  • Pembina memanggil init(), yang membenarkan tak segerak operasi.
  • Penggunaan:

    var myObj = new myClass();
    myObj.init(function() {
      // Use myObj within the callback
    });
  • Pelaksanaan:

    class myClass {
      constructor () {
      }
      init (callback) {
          // Asynchronous operations and callback
      }
    }

2. Corak Pembina:

  • Pembina melemparkan ralat jika dipanggil terus.
  • Kaedah binaan statik() mengembalikan janji untuk objek.
  • Penggunaan:

    myClass.build().then(function(myObj) {
      // Use myObj
    });
    
    async function foo () {
      var myObj = await myClass.build();
    }
  • Pelaksanaan:

    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);
      }
    }

Nota: Pembina boleh menggunakan panggilan balik dan bukannya janji.

Fungsi Memanggil dalam Fungsi Statik:

  • Fungsi statik tidak terikat pada objek (tidak seperti kaedah contoh).
  • Oleh itu, ini merujuk kepada kelas, bukan objek yang diintai.
  • Untuk memanggil kaedah contoh daripada fungsi statik, jadikannya sama ada fungsi biasa atau kaedah statik.

    class A {
      static foo () {
          bar1();   // OK
          A.bar2(); // OK
      }
      static bar2 () {}
    }
    function bar1 () {}

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengendalikan Operasi Asynchronous Semasa Pembinaan Objek dalam JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn