問題: 嘗試在建構子中使用async/ await語法建構子引發錯誤「類別建構子可能不是非同步的方法。」
原因: 非同步函數傳回 Promise,而建構函式傳回正在建構的物件。這會產生衝突,導致無法同時使用 async/await 和建構子。
解決方法:
1.初始化函數(init()):
用法:
var myObj = new myClass(); myObj.init(function() { // Use myObj within the callback });
實作:
class myClass { constructor () { } init (callback) { // Asynchronous operations and callback } }
2.建構器模式:
用法:
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); } }
注意: 建構者可以使用回調來取代
在靜態函數中呼叫函數:
呼叫實例方法靜態函數,使它們要麼是常規函數,要麼是靜態方法。
class A { static foo () { bar1(); // OK A.bar2(); // OK } static bar2 () {} } function bar1 () {}
以上是JavaScript 物件建構過程中如何處理非同步操作?的詳細內容。更多資訊請關注PHP中文網其他相關文章!