问题: 尝试在构造函数中使用 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中文网其他相关文章!