Nodejs обещание отложено - PullRequest
0 голосов
/ 04 мая 2020

Я пытаюсь создать конструктор для нескольких подключений Redis, поэтому я начал что-то пробовать. Я только возвращаюсь из Promise {}, но если я сделаю console.log перед возвратом, я получаю реальное значение.

EDIT: Попытка без async / await все еще не работает.

приложение 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;

1 Ответ

1 голос
/ 04 мая 2020

Я не совсем понимаю ваш вопрос, но вижу здесь проблему. Вам нужно sh улучшить свои знания об обещаниях и c ожидании Asyn. Вы можете использовать синтаксис asyn c 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)
    };
}

В обоих случаях вы можете await /. Then result в своем приложении. js

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

EDIT - 1

Если на это потребуется время, даже 1 миллисекунда, вы не сможете получить значение сразу. Вам нужно использовать asyn c -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 и Asyn c Await MDN

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...