Метод Redis hGet переходит в тупик при втором вызове при асинхронном вызове - PullRequest
0 голосов
/ 10 апреля 2019

Проблема в том, что getMasterData при вызове никогда не печатает «Преодолел худший барьер» :(. Бог знает, что я делаю неправильно. Это то, чего я на самом деле хочу достичь.

Что я здесь не так делаю? Пожалуйста, дайте мне знать. Любая помощь будет по достоинству оценена.

Ниже моя реализация реализации redis узла:

Если я запускаю тот же this.getAll () в цикле без ожидания, он отлично работает.

Во второй раз ждите, что он никогда не вернется обратно из this.cacheStore.getByKey ('организаций') и навсегда зашел в тупик.

Нет ошибок и нет ответа.

Также, если я удалю 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');
  }

1 Ответ

0 голосов
/ 10 апреля 2019

Вы объявляете setKey() как функцию async, но когда вы вызываете ее в getAll(), вы забыли await для нее.Либо удалите async, либо позвоните по номеру await.Я не уверен, что это решит вашу ошибку, но попробуйте!

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