Как в node.js вернуть значение из функции, внутри которой используются асинхронные функции?

Имеем в базе редиса ключ redis_key имеющим значение 2016-02-02 23:59:59+00:00
var Redis = require('ioredis');
redis = new Redis();

var default = '2016-01-01 00:00:00+00:00';

function getLastTime() {
  var last = default;
        redis.get('redis_key', function (err, result) {
           last = result;
        });
  return last;
}

console.log(getLastTime()); // 2016-01-01 00:00:00+00:00
// а хотелось бы видеть 2016-02-02 23:59:59+00:00 полученный из редиса.


Пробовал использовать https://github.com/ybogdanov/node-sync но для возврата значения из функции не подходит.

Важно! Необходимо что бы функция вернула значение, которое вычисляется при помощи асинхронных функций.

ps. Я понимаю что приведенный пример можно переписать на идеологию асинхронного программирования, но код приведен как упрощенный пример.
  • Вопрос задан
  • 4120 просмотров
Решения вопроса 1
warwar_dp
@warwar_dp Автор вопроса
developer
Похоже тут не остается вариантов.
Только писать свою структуру, которая хранит необходимые данные, эти данные использовать в синхронных функциях, а обновление данных, используя асинхронные функции, вести периодически.

Упрощенный пример.
const Redis = require('ioredis');
redis = new Redis();

var default_time = '2016-01-01 00:00:00+00:00';

function getLastTime() {
  return default_time;
}

setInterval(function() {
  redis.get('redis_key', function (err, result) {
    if (err === null) {
      default_time = result;
    }
  });
}, 100);

console.log(getLastTime());
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
MarcusAurelius
@MarcusAurelius Куратор тега Node.js
автор Impress Application Server для Node.js
Через колбэки
function getLastTime(callback) {
  var last = default;
  redis.get('redis_key', function (err, result) {
    callback(result);
  });
}
// Usage:
getLastTime(function(last) {
  console.log(last);
});
Ответ написан
sfi0zy
@sfi0zy
Creative frontend developer
Этот вопрос касается не только nodejs - тут есть подход к решению вопроса о возврате значения из асинхронной функции с помощью callback`ов.
Ответ написан
@catHD
Это основа основ node js callback / Promise.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы