272 / 176 / 30
Регистрация: 16.03.2017
Сообщений: 1,626
|
||||||||||||||||
1 | ||||||||||||||||
Результат колбэка вернуть как результат функции11.03.2020, 10:57. Показов 1067. Ответов 5
Метки нет Все метки)
(
Добрый день, подскажите плииииз, такое в принципе возможно? (потери в продуктивности не важны)
Есть "линейная" функция (без колбэка) встроенная в модуль. (пример сильно упрощенный - на самом деле она вообще в JS встроена "на уровне браузера")
Теперь на другом модуле хочу "ПОДДЕЛАТЬ" эту функцию, взяв результат с сервера через ajax. "Применение" менять нельзя! только функцию... Теперь надо сделать что-то вроде:
"Зависание"/"перегрев" браузера для меня НЕ КРИТИЧНО!!! Главное - чтобы сработало...
0
|
|
11.03.2020, 10:57 | |
Ответы с готовыми решениями:
5
Как вернуть результат функции в литерал объекта Возврат responseText из XMLHttpRequest aka AJAX как результат работы функции Получить результат функции Возврат результат из функции |
272 / 176 / 30
Регистрация: 16.03.2017
Сообщений: 1,626
|
||||||
12.03.2020, 17:25 [ТС] | 2 | |||||
up!
Есть хоть какие-нибудь идеи??? Ну ОЧЕНЬ нужно... ...попробовал сделать отдельную страницу-"исполнителя"(открытую в соседней закладке) и отправлять ей задачи через
"исполнитель" ловит заказ в setInterval и имитирует выполнение. результат возвращает в тот-же сторедж (под другим именем/ключем) Оказалось что Хром пока не закончит цикл не "отправит" изменения в сторэдж для других окон. (исполнитель не получает заказ) А Опера наоборот - держит старый кеш сторэджа, взятый перед циклом. И свежие данные получит лишь после окончания обработчика eventloop. (исполнитель успешно получил заказ, засунул в сторэдж ответ, но "заказчик" получит результат только после выхода из цикла) Еще раз задача: Есть (самописный/переделанный) браузер, в который ВСТРОЕНЫ (специализированные) функции возвращающие строковые и числовые значения. Без колбэков! прямо в result. Мне нужен инструмент для отладки/разработки страниц под тот браузер, где значения для "поддельных" функций будут браться с сервера-ретранслятора через ajax. Есть возможность подобное проделать не оборачивая эти-функции в колбэк-обертки ради "совместимости"? Может можно в хром или оперу такие-же "встроенные" ГЛОБАЛЬНЫЕ функции встроить? Например на уровне С++ или плагинов? Добавлено через 1 час 22 минуты ВОПРОС ЗАКРЫТ! ![]() Помогли куки! Та-же методика - окошку-"исполнителю" через куки отправил задачу и в бесконечном цикле дождался возврата ответа. Единственный явный недостаток - это 10-20% процессорного времени "съедаемого" во время холостого бесконечного цикла... было бы круто использовать что-то вроде "остановки потока на время" как в других языках... вроде sleep(300)
1
|
129 / 112 / 39
Регистрация: 27.09.2012
Сообщений: 305
|
|
12.03.2020, 19:20 | 3 |
andyj, есть же промисы и async/await. Да и чем колбэки плохи?
1
|
272 / 176 / 30
Регистрация: 16.03.2017
Сообщений: 1,626
|
||||||
12.03.2020, 19:38 [ТС] | 4 | |||||
ничем не плохи, но не подходят!
есть простой скрипт вида
Как видите код получается компактным и понятным БЕЗ кучи колбэков. (на релизе нет смысла его усложнять) Но разрабатывать/отлаживать/тестировать на устройстве - не удобно. (заливать тяжело/медленно, монитор не удобный) Решил создать эмулятор прямо в Хроме. Но данные хочу брать все-таки с тестового устройства к которым можно обратиться через веб-сервер-ретранслятор через ajax. Пусть с задержкой, но цифры будут актуальными. Вывод - надо: 1) поймать факт что страница открылась не на устройстве - хватает if(device1 == null) и подгрузить модуль создающий недостающие функции. 2) сделать свою ЭМУЛЯЦИЮ функции device1.get_val_1, которая будет в ТОМ-же коде возвращать цифры с УДАЛЕННОГО устройства. Которое оно будет получать через ajax. ...но... код test() менять нельзя! ни на колбэки ни на async/await. ...почти 2 дня думал как обмануть систему! )) официально в event-loop такое сделать нельзя! никак! ))
0
|
129 / 112 / 39
Регистрация: 27.09.2012
Сообщений: 305
|
|
13.03.2020, 09:56 | 5 |
Так и не меняйте. Его можно обернуть в промисы или реализовать асинхронную проверку возвращаемого значения с помощью таймаута. Вариантов масса, но к сожалению задача не очень понятная.
0
|
272 / 176 / 30
Регистрация: 16.03.2017
Сообщений: 1,626
|
|
14.03.2020, 05:37 [ТС] | 6 |
Есть языки/среды (с++, делфи, лазарус, java, АНДРОИД), которые позволяют в своих формах использовать "компонент-веб-браузер". Например чтобы написать свой собственный специализированный браузер
Не по теме: ...я когда-то на лазарус написал браузер "с тоненькими бортиками, отключаемой шапкой и on-top = очень удобно для тестирования/отладки JS. Добавил кнопку send (ajax или сокеты) и на экране лишь одна "плавающая" маленькая кнопка с целым бразуером вокруг пока ты "реакцию сервера" доделываешь/отлаживаешь. В эти "самописные" браузеры можно встроить/добавить прямо в ядро JS свои объекты/функции! Прямо на уровне ядра! Как объект windows в браузерах. Например get_disk_size("с:"):int - без всяких колбэков. Вот "под такой браузер" и пишется сайт. Но дописывать/менять/отлаживать его проще все-таки на большом мониторе и на домашнем компьютере, а не на удаленном устройстве с маленьким монитором (или даже без него). Еще раз... есть index.html+index.js, которые написаны без использования колбэков под специальны браузер. Вполне успешно работающий. Код простой и понятный. Надо: подгрузив в index.html модуль emule.js "перекрыть" линейные функции которые брали значения из браузера и подсунуть ему значения которые можно взять только с сервера через ajax (только с колбэком). index.js менять НЕЛЬЗЯ! вообще! И в index.htm можно лишь добавить проверку "если ты отладчик/разработчик - догрузи еще модули эмулятора) ...ладно... пока задачу решил! вопрос закрываю! правда работает только в Опере (хром еще не проверял, а в очень старом хроме(хромиум) не сработало), но мне пока хватит - это уже на порядок упростило и ускорило разработку.
1
|
14.03.2020, 05:37 | |
Помогаю со студенческими работами здесь
6
Результат функции не записывается в переменную Не всегда правильный результат функции Вывести результат переменной за пределы функции Как передать результат в скрипт? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |