Я довольно новичок в обратном обращении к программированию в javascript. Есть ли способ для force код для ожидания завершения вызова функции через обратный вызов? Позвольте мне объяснить. Следующая функция принимает число и возвращает результат на основе этого.Приостановка до вызова обратного вызова, в 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
не вызывает функцию обратного вызова, а затем возвращает этот ответ?
Даже если вы могли бы подождать, вы просите для не реагирующего браузер, делая это. – JohnFx
Это справедливо. Моя цель заключалась в том, чтобы установить, что на самом деле * невозможно * создать функцию, которая возвращает значение, полученное с помощью обратного вызова. – jameshfisher