2011-01-26 3 views
0

Я хочу реализовать функцию, которая выполняет запросы ajax (response is json), пока в ответе не будет свойства «next». После этого мне нужно выполнить некоторую функцию обратного вызова. Каков наилучший способ для этого? Мой код ниже не работает из-за неправильной области обратного вызова, и я не могу представить, как правильно его передать.Сфера действия функции обратного вызова

 
_requestPhotos = function(url, callback) { 
    getYFContent(url, function(data) { 
    // some actions 

    if (!!data.next) { 
     _requestPhotos(data.next, callback); 
    } else { 
     callback(smth); 
    } 
    }); 
}; 

ответ

0

Нет очевидных ошибок из сценария, который вы опубликовали. Например, эквивалентное испытание может выглядеть следующим образом:

alertResult = function(text) { 
    console.log("Result is: " + text); 
} 

doRecursive = function(data, callback) { 
    if(!!data.next) { 
     doRecursive(data.next, callback); 
    } else { 
     callback(data.value); 
    } 
} 

var d = { value: 1, next: { value: 2, next: { value: 3 }}}; 

doRecursive(d, alertResult); 

Результат журнала "Result is: 3", что и следовало ожидать.

Ошибка в другом месте. Как вы называете это в первый раз, каков обратный вызов, который вы передаете ему (и как он определяется), и что именно делает getYFContent?

+0

Это не просто рекурсивная функция. Проблема заключается в том, что «getYFContent» - это функция запроса ajax, и все действия описаны во втором аргументе, который является функцией обратного вызова (например, в $ .get). –

+0

(продолжение) ... Я хочу заполнить массив «фото» соответствующими значениями. Чтобы получить их, я должен делать запросы последовательно один за другим. И в этом проблема - getYFContent() вызывает рекурсивно и обратный вызов (функция, которая должна выполняться после отправки всех запросов, и у нас есть все фотографии). Область fn - это только первая итерация. –

+0

Ах, хорошо, вы можете добавить еще один аргумент 'getYFContent'? таким образом вы можете продолжать передавать обратный вызов. – Hamish

Смежные вопросы