Я довольно плохо знаком с программированием в стиле callback в javascript.Есть ли способ заставить код ждать, пока вызов функции не завершится через обратный вызов?Позволь мне объяснить.Следующая функция берет число и возвращает результат на его основе.
function get_expensive_thing(n) {
return fetch_from_disk(n);
}
Пока все достаточно просто.Но что мне делать, когда fetch_from_disk
вместо этого возвращает свой результат через обратный вызов?Например:
function get_expensive_thing(n) {
fetch_from_disk(n, function(answer) {
return answer; // Does not work
});
}
Выше не работает, потому что return
входит в область действия анонимной функции, а не функции get_expensive_thing
.
Существует два возможных«решения», но оба неадекватны.Одним из них является рефакторинг get_expensive_thing
для себя ответа с обратным вызовом:
function get_expensive_thing(n, callback) {
fetch_from_disk(n, function(answer) {
callback(answer);
});
}
Другой заключается в перекодировании fetch_from_disk
, но это не вариант.
Как мы можем достичьжелаемый результат при сохранении желаемого поведения get_expensive_thing
- т. е. подождать, пока fetch_from_disk
не вызовет обратный вызов, а затем вернуть этот ответ?