Форум программистов, компьютерный форум, киберфорум
Наши страницы
JavaScript
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
Prometheus
0 / 0 / 0
Регистрация: 18.07.2013
Сообщений: 19
1

Return callback функции, вызываемой в цикле

25.05.2014, 17:29. Просмотров 1335. Ответов 9
Метки нет (Все метки)

Всем привет!

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

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

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


Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
//Вариант первый, который нужен, но не работает
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, например,то все работает.

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

Спасибо!

Добавлено через 13 минут
судя по выводу undefined, где-то теряется контекст. пляски с this и function.protoptype.bind не помогли, возвращает снова undefined... ((
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.05.2014, 17:29
Ответы с готовыми решениями:

Передача переменных из функции вызываемой событием
Здравствуйте, форумчане. У меня вопрос такого рода. Событие нажатия на кнопку...

Как из функции, вызываемой по событию, вернуть значение?
Дано: функция, вызываемая по событию. Требуется вернуть значение функции....

Callback функции
Есть запрос вроде этого: somevar.select(data, function(response) { //...

Задача с подпиской на функции и callback
Вот такая задача. Уже несколько часов сижу и абсолютно никаких мыслей. По...

Получить данные и callback функции
Всем привет ! Ребят, пишу приложение. Вызываю апи вконтакта для получения...

9
vovandr
630 / 518 / 194
Регистрация: 19.08.2013
Сообщений: 1,400
25.05.2014, 18:16 2
У вас функция parser ничего и не должна возвращать ... return в ней я не вижу
0
Prometheus
0 / 0 / 0
Регистрация: 18.07.2013
Сообщений: 19
25.05.2014, 18:41  [ТС] 3
parser вызывает на каждой итерации print, который, по идее, должен возвращать значение.
почему тогда, если print вызывает alert, а не return, все работает?
0
vovandr
630 / 518 / 194
Регистрация: 19.08.2013
Сообщений: 1,400
25.05.2014, 18:42 4
Потому что надо различать понятия исполнение функции и возврат функцией значения. У вас пробел в этом очевидно.
0
Prometheus
0 / 0 / 0
Регистрация: 18.07.2013
Сообщений: 19
25.05.2014, 18:49  [ТС] 5
проблема в том, если реализовать вот так

Javascript
1
2
3
4
var parser = function () {
    for (var i in arr) {
        return print(arr[i]) 
     }}

return будет вызван единожды и директива continue не помогает в данном случае.
0
vovandr
630 / 518 / 194
Регистрация: 19.08.2013
Сообщений: 1,400
25.05.2014, 18:53 6
все правильно, поясните смысл функции print??? зачем она и какую функциональную нагрузку она должна выполнять?
0
Prometheus
0 / 0 / 0
Регистрация: 18.07.2013
Сообщений: 19
25.05.2014, 18:59  [ТС] 7
print - это навороченая внешняя функция, которая в итоге возвращает по переданному ключу замену из словаря (в главном посте описано как). я просто упростил её до формального return.

у меня нет прав её редактирования по соглашению, и вот именно её мне нужно вызывать её i раз, передав в неё отфильтрованное значение. (parser тоже довольно монструозная функция в оригинале, 100-200 строчек кода)
0
vovandr
630 / 518 / 194
Регистрация: 19.08.2013
Сообщений: 1,400
25.05.2014, 19:02 8
Ну вот вы ее и вызываете) Ошибок в вашем коде нет, print все верно возвращает. Проверьте в консоле:
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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 in arr) {
        console.log(print(arr[i])); // title hudge
     }
 };
 
parser();
0
Prometheus
0 / 0 / 0
Регистрация: 18.07.2013
Сообщений: 19
25.05.2014, 19:05  [ТС] 9
c console.log работает, это понятно. а почему при простом вызове не заменяет ничего?
или это я переработал и уже туплю дико???
0
vovandr
630 / 518 / 194
Регистрация: 19.08.2013
Сообщений: 1,400
25.05.2014, 19:07 10
Цитата Сообщение от Prometheus Посмотреть сообщение
почему при простом вызове не заменяет ничего?
Цитата Сообщение от vovandr Посмотреть сообщение
Потому что надо различать понятия исполнение функции и возврат функцией значения.
Цитата Сообщение от Prometheus Посмотреть сообщение
или это я переработал и уже туплю дико
Очевидно да
1
25.05.2014, 19:07
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.05.2014, 19:07

Почему callback-функции называются функциями ОБРАТНОГО вызова
Доброго времени. Нуждаюсь в объяснении. Очередной вопрос в стиле «Что такое...

Return переменной из функции
Скажите пожалуйста, как вернуть переменную el, вот так не работает el нужно...

Callback is not a function
Так и этак переделывал функцию (которая возвращает изображение в base64) но она...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru