gpt4 book ai didi

node.js - Redis hGet 方法在异步调用时在第二次调用时陷入死锁

转载 作者:可可西里 更新时间:2023-11-01 11:23:38 24 4
gpt4 key购买 nike

问题是调用 getMasterData 时从不打印“通过了最糟糕的障碍”:(。天知道我做错了什么。这才是我真正想要实现的目标。

我在这里做错了什么?请告诉我。任何帮助将不胜感激。

下面是我对node redis实现的实现:

如果我在没有任何 await 的情况下在循环中运行相同的 this.getAll() ,它会完美地工作。

第二次 await 它永远不会从 this.cacheStore.getByKey('organizations') 返回并永远陷入死锁。

没有错误也没有响应。

另外,如果我删除 data2 等待。不过,它工作正常。

async setKey(key, data) {
try {
const flatteredData = JSON.stringify(data);
return this.cacheStore.hmset(key, key, flatteredData);
} catch (error) {
return error;
}
}
getByKey(key) { // eslint-disable-line consistent-return
return new Promise((resolve, reject) => {
this.cacheStore.hget(key, key, (err, res) => {
if (err) {
reject(err);
} else {
resolve(JSON.parse(res));
}
});
});
}
async getAll() {
const cache = await this.cacheStore.getByKey('organizations');
if (cache) return cache;
const organizations = await this.db
.collection('organizations')
.find({})
.toArray();
await this.cacheStore.setKey('organizations', organizations);
return organizations;
}
async getMasterData(){
const data1 = await this.getAll();
const data2 = await this.getAll();
console.log('Passed the worst barrier');
}

最佳答案

您将 setKey() 声明为 async 函数,但是当您在 getAll() 中调用它时,您忘记了 await 为它。删除 async 或使用 await 调用它。我不确定这是否会解决您的错误,但请尝试一下!

关于node.js - Redis hGet 方法在异步调用时在第二次调用时陷入死锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55613920/

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