Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> return из функции с коллбэком 
:(
    Опции темы
SoWa
Дата 5.6.2012, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

Репутация: нет
Всего: 74



Привет! Подскажите, как быть в случае, если я в функции А вызываю другую функцию Б, которой передаю коллбэк В, в который приходят данные - как их вернуть из функции А?
Код

function getBase64ByPath(path) { //Функция А

    function onSuccess(entry) { //Коллбэк
        entry.file( function(file) {
            var reader = new FileReader();
            reader.onloadend = function(evt) {
                var b64i = evt.target.result.substr('data:image/jpeg;base64,'.length, evt.target.result.length); //Вот это надо вернуть из функции А
                //return b64i;
            }
            reader.readAsDataURL(file);
        } );
    }

    window.resolveLocalFileSystemURI(path, onSuccess,    function(evt){alert('Event: '+evt.code);}); // Функция Б
}


Добавлено через 3 минуты и 58 секунд
Знаю вариант - передавать в А коллбэк из места вызова, а там получать потом данные. Но из этого порочного круга коллбэков разве не выйти?


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
Amphiluke
Дата 5.6.2012, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

Репутация: 35
Всего: 112



Единственный вариант — функция A должна блокировать дальнейшее исполнение скрипта, пока не отработает callback-функция, т.е. весь процесс должен быть синхронным. Если объекты FileReader могут работать не асинхронно (хотя мне об этом не известно), то только в этом случае ф-ция A может вернуть разультат работы callback-функции.

Но вообще правильнее было бы именно работать в асинхронном режиме, и все действия, зависящие от результата работы callback-функции, выполнять именно из callback-функции, а не из исходной функции, инициирующей запросы.
PM   Вверх
SoWa
Дата 5.6.2012, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

Репутация: нет
Всего: 74



Просто логика функции в том, чтобы получить на вход путь и на выходе строку base64.
А как заблокировать дальнейшее исполнение скрипта? У меня мобильное приложение, не страшно, если заблокировать.


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
Amphiluke
Дата 5.6.2012, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

Репутация: 35
Всего: 112



Судя, по спецификации, API синхронного механизма чтения все же было предусмотрено в виде интерфейса FileReaderSync, который используется в приложениях с фоновыми вычислениями (Web Workers). Хотя хз, насколько это вам подойдет.

Добавлено через 2 минуты и 18 секунд
Цитата(SoWa @  5.6.2012,  18:30 Найти цитируемый пост)
Просто логика функции в том, чтобы получить на вход путь и на выходе строку base64.

Я бы сделал, чтобы ф-ция getBase64ByPath сама принимала параметр в виде пользовательской callback функции, которая вызывалась бы из метода reader.onloadend с результатами обработки.
PM   Вверх
SoWa
Дата 5.6.2012, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

Репутация: нет
Всего: 74



Увы, у меня не тот FileReader - у меня он из пакета Phonegap. А там ни намека в документации на синхронность


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
Amphiluke
Дата 5.6.2012, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


   ☽
***


Профиль
Группа: Завсегдатай
Сообщений: 1253
Регистрация: 26.8.2009

Репутация: 35
Всего: 112



Ну, значит, видимо, остается только вариант 
Цитата(SoWa @  5.6.2012,  18:07 Найти цитируемый пост)
передавать в А коллбэк из места вызова, а там получать потом данные

Не так уж он плох, мне кажется.
PM   Вверх
SoWa
Дата 5.6.2012, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

Репутация: нет
Всего: 74



Эх, опять лапша будет :(


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1595 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.