Bạn đang đấu tranh với sự không đồng bộ vì bạn vẫn đang viết các hàm của mình trong một mô hình đồng bộ.
Trong không đồng bộ, bạn nên đính kèm các lệnh gọi lại vào các sự kiện. Bạn không nên mong đợi kết quả từ một hàm không đồng bộ như get_latest_results()
, nhưng bạn nên chuyển cho nó một hàm gọi lại như một đối số sẽ được gọi khi kết quả sẵn sàng. Lệnh gọi lại sẽ thực hiện bất cứ điều gì cần thực hiện với kết quả của bạn:
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
}
Sau đó, bạn có thể gọi hàm của mình như sau:
get_latest_results(1000, function (result) {
//--- Do whatever needs to be done with the latest result...
});