#javascript
#javascript
Вопрос:
Я пытаюсь получить данные с помощью рекурсивной функции, но мой объект ответа не обновляется при вызове рекурсивной функции;
function checkData(id) {
var response = {
new_id: '',
status: false
}
var order = somefunction(id);
var isOriginal = order.isOriginal
var enddate = order.enddate
var new_id = order.originalId
// first check
if (enddate == '' amp;amp; isOriginal) {
response.new_id = new_id;
response.status = true;
}
//second check
if (!isOriginal) {
if (new_id) {
checkData(new_id); // recursive call
}
}
return response;
}
если выполняется второе условие проверки, он загружает данные, но когда ответ утешается, он показывает исходные данные, которые были инициализированы ранее. переменная ответа не обновляется при рекурсивном вызове. Однако он обновляется, если первая проверка пройдена.
Комментарии:
1. Каждый раз, когда вы вызываете свою рекурсивную функцию,
response
она повторно инициализируется. Либо поместите объект в верхнюю область видимости, либо передайте его в качестве аргумента функции.2. или верните результат вашего рекурсивного вызова, в настоящее время он работает рекурсивно, но никогда ничего не возвращает
3. @FredStark, где его точно вернуть, попытался вернуть ответ при первой проверке, но получил то же самое
4. затем он будет повторяться до тех пор, пока не будет получен исходный ответ, и каждый вызов будет возвращать этот ответ, разматывая все вызовы функций и, наконец, возвращаясь из первого вызова. В противном случае он никогда не возвращается из повторных вызовов
5. Там нет подсчета, он будет продолжать повторяться до
isOriginal
тех пор, пока не станет истинным
Ответ №1:
Основываясь на комментариях @Fred Stark, успешно решаемая путем перенастройки рекурсивного вызова,
function checkData(id) {
var response = {
new_id: '',
status: false
}
var order = somefunction(id);
var isOriginal = order.isOriginal
var enddate = order.enddate
var new_id = order.originalId
// first check
if (enddate == '' amp;amp; isOriginal) {
response.new_id = new_id;
response.status = true;
}
//second check
if (!isOriginal) {
if (new_id) {
return checkData(new_id); // recursive call ---> called return here
}
}
return response;
}