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()):
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:
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:
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!