問題: 内で async/await 構文を使用しようとしていますコンストラクター関数により、「クラス コンストラクターは非同期ではない可能性があります」というエラーが発生しますmethod."
原因: 非同期関数は 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); } }
注: ビルダーは代わりにコールバックを使用できます。 Promise.
静的関数内での関数の呼び出し:
To静的関数からインスタンス メソッドを呼び出し、通常の関数または静的メソッドのいずれかにします。
class A { static foo () { bar1(); // OK A.bar2(); // OK } static bar2 () {} } function bar1 () {}
以上がJavaScript でオブジェクトの構築中に非同期操作を処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。