Potýkáte se s asynchronií, protože své funkce stále píšete v synchronním paradigmatu.
V asynchronním režimu byste měli k událostem připojit zpětná volání. Neměli byste očekávat výsledek od asynchronní funkce, jako je get_latest_results()
, ale měli byste mu předat funkci zpětného volání jako argument, který se má vyvolat, až budou připraveny výsledky. Zpětné volání provede vše, co je třeba udělat s vašimi výsledky:
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
}
Potom můžete svou funkci zavolat takto:
get_latest_results(1000, function (result) {
//--- Do whatever needs to be done with the latest result...
});