gpt4 book ai didi

javascript - 带有 Promises 的构造函数中的同步代码

转载 作者:行者123 更新时间:2023-11-30 11:15:07 26 4
gpt4 key购买 nike

<分区>

我正在用 Node 开发一个项目——我不太熟悉这种语言。

在项目中,我有一个类将负责读取数据并将数据写入数据库 - 在本例中为 LevelDB。理想情况下,我想在构造函数中同步设置数据库连接,以便方法(writeItem、readItem 等)在被调用得太快时不会失败。或者换句话说,我不希望构造函数返回并允许下一行代码运行,直到所有的 promise 都得到满足。

我想我要么缺少语言的基础知识,要么 Node 中有一些我不知道的设计模式。这里有一个以同样方式失败的玩具示例:

class AClass {
constructor(n) {
this.name = n;
console.log('calling init.');
this.init();
console.log('init returned.');
}

func() {
return new Promise(resolve => {
setTimeout(() => {
resolve(true);
}, 2000);
});
}

async init() {
console.log('calling func()');
let x = await this.func();
console.log('after func(): ');
}

}


let x = new AClass('test');
console.log(JSON.stringify(x));

这会产生输出:

calling init.
calling func()
init returned.
{"name":"test"}
after func():

这让我很惊讶。我本以为:

calling init.
calling func()
after func():
init returned.
{"name":"test"}

最终目标是实例化一个连接到 levelDB 实例的类,并且在建立连接之前不返回对象。所以代码可能看起来像这样:

let storage = new StorageObject();
storage.addItem(key, value); // <-- this fails unless StorageObject
// finishes the db setup.

谢谢!山姆

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com