Вие се борите с асинхронността, защото все още пишете функциите си в синхронна парадигма.
В асинхронния режим трябва да прикачите обратни извиквания към събития. Не трябва да очаквате резултат от асинхронна функция като get_latest_results()
, но трябва да му предадете функция за обратно извикване като аргумент, който да бъде извикан, когато резултатите са готови. Обратното извикване ще направи всичко, което трябва да се направи с вашите резултати:
var get_latest_results = function (feedId, readyCallback) {
client.get('feed:' + feedId + ':latest', function (err, res) {
var latest_reading_key = res.toString();
client.hgetall(latest_reading_key, function (err, res) {
readyCallback(res); //--- Trigger Callback
});
});
// how do I specify a return value for this function? //--- You don't
}
След това можете да извикате функцията си по следния начин:
get_latest_results(1000, function (result) {
//--- Do whatever needs to be done with the latest result...
});