Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   return в callback функции, вызываемой в loop'е (https://javascript.ru/forum/events/47466-return-v-callback-funkcii-vyzyvaemojj-v-loop%27e.html)

brokenwind 25.05.2014 14:31

return в callback функции, вызываемой в loop'е
 
Всем привет!
Пишу extension для шаблонизатора, который получает через AJAX шаблон, а в нем находит текст между специфическими тегами и отправляет его на перевод (вызывает callback функцию, которая ищет соответствие полученной строки в JSON-библиотеки и отдает перевод).

Теперь о самой проблеме. Все работает отлично, но в loop, когда проходит итерация, не работает return callback-функции.

Упрощенно выглядит так:

//Вариант первый, который нужен, но не работает
var print = function (info) {
    return info.tits
}

//Вариант второй, работает, когда без return
var print = function (info) {
    alert(info.tits)
}

//Эмуляция возвращенного массива
var arr = [];
var objOne = {tits: 'tide'}
var objTwo = {tits: 'huge'}
arr.push(objOne)
arr.push(objTwo)


//Упрощенная функции, перебирающий массив
var parser = function () {
	for (var i in arr) {
        print(arr[i]) 
     }}

parser();


print(arr[0]) возвращает все правильно.
parser() возвращает undefined, хотя если заменить в функции print return на alert, например,то все работает.

помогите советом )

Спасибо!

рони 25.05.2014 14:52

brokenwind,
<script>
//Вариант первый, который нужен, но не работает
var print = function (info) {
    return info.tits
}



//Эмуляция возвращенного массива
var arr = [];
var objOne = {tits: 'tide'}
var objTwo = {tits: 'huge'}
arr.push(objOne)
arr.push(objTwo)


//Упрощенная функции, перебирающий массив
var parser = function () {
    for (var i=0; i<arr.length; i++)  {alert(print(arr[i]))}
    }

parser();


</script>

brokenwind 25.05.2014 17:05

нет, это совсем не то
мне не alert нужен, а return

Erolast 25.05.2014 18:10

А с чего бы функция parser должна что-то возвратить? Это функция print возвращает некое значение при ее вызове в цикле в функции parser... и все. Больше никуда это значение не девается.

Erolast 25.05.2014 18:14

То есть, в твоем случае надо как-то так:
var print = function (info) {
    return info.tits;
}

var arr = [];
var objOne = {tits: 'tide'};
var objTwo = {tits: 'huge'};
arr.push(objOne);
arr.push(objTwo);

var parse = function () {  //не parser, а parse. Так правильнее.
    result = "";
    for (var i=0; i<arr.length; i++)  
    {
        result += print(arr[i]);
    }
    return result;
}

alert(parse());

brokenwind 25.05.2014 18:46

нет, это совсем не то, что нужно )
но на мысль вы меня натолкнули, спасибо! )


Часовой пояс GMT +3, время: 04:58.