简体   繁体   中英

Nodejs promise pending

I'm trying to make an constructor for multiple Redis connections, so i've started to try something. I'm only getting back from has Promise { }, but if I do an console.log before the return I'm getting the real Value.

EDIT: Tried without async/await still don't work.

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;

I don't understand your question completely but I see a problem here. You need to brush up your knowledge of Promises and Async await. You either use async await or Promises (.then) syntax to make it work properly.

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)
    };
}

In both cases, you can await/.then result in your app.js

// app.js
const rBredis = require("./redis");
const redis = new rBredis();
redis.has("kek").then(res => console.log(res))

EDIT - 1

If this is something that'd take time even 1 millisecond there's no way you're going to get the value right away. You need to use either async-await or promises. Or use a callback like this

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))

Here's reference to Promises MDN and Async Await MDN

Hope it helps.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM