Nodejs承诺待处理"/>
Nodejs承诺待处理
我正在尝试为多个Redis连接创建一个构造函数,所以我已经开始尝试一些东西。我只是从Promise {}那里回来,但是如果在返回之前做console.log,我会得到真正的价值。
编辑:在没有异步/等待的情况下尝试仍然无法正常工作。
app.js
const rBredis = require("./redis");
const redis = new rBredis();
console.log(redis.has("kek"));
redis.js
const Redis = require("ioredis");
class BasicRedis {
constructor() {
// TODO
};
redis = new Redis();
async has(id) {
return await this.redis.exists(id)
.then( exists => {
// console.log(exists); works 0
return exists; // works not Promise { <pending> }
});
};
}
module.exports = BasicRedis;
回答如下:我不完全理解您的问题,但是我在这里看到了问题。您需要复习Promises和Async等待的知识。您要么使用异步await或Promises(.then)语法以使其正常工作。
redis.js
class BasicRedis {
constructor() {
// TODO
};
redis = new Redis();
// You can either do it like this
has(id) {
return new Promise((res, rej) => {
this.redis.exists(id)
.then( exists => {
res(exists)
}).catch(err => {
rej(err.message)
});
})
};
// Or like this
has(id) {
return this.redis.exists(id)
};
}
在两种情况下,您都可以等待/。然后生成app.js
// app.js
const rBredis = require("./redis");
const redis = new rBredis();
redis.has("kek").then(res => console.log(res))
编辑-1
如果这需要花费甚至1毫秒的时间,那么您将无法立即获得价值。您需要使用async-await或promises。或使用类似这样的回调
redis.js
class BasicRedis {
constructor() {
// TODO
};
redis = new Redis();
has(id, callback) {
this.redis.exists(id)
.then( exists => {
callback(exists)
}).catch(err => {
callback(err.message)
});
};
}
app.js
const rBredis = require("./redis");
const redis = new rBredis();
redis.has("kek", (res) => console.log(res))
这里是指Promises MDN和Async Await MDN
希望有帮助。
更多推荐
Nodejs承诺待处理
发布评论