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

Linda Hamilton
Lepaskan: 2024-11-28 02:09:10
asal
460 orang telah melayarinya

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
    });
    Salin selepas log masuk
  • Pelaksanaan:

    class myClass {
      constructor () {
      }
      init (callback) {
          // Asynchronous operations and callback
      }
    }
    Salin selepas log masuk

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();
    }
    Salin selepas log masuk
  • 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);
      }
    }
    Salin selepas log masuk

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 () {}
    Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan