ФорумПрограммированиеJavaScript → Взаимодейстие с нативным апом

Взаимодейстие с нативным апом

  • kostyl

    Сообщения: 5203 Репутация: N Группа: Джедаи

    Spritz 8 июня 2015 г. 12:47

    Вообщем открываю на девайсе html старинцу в вебвью контроле и пытаюсь делегировать выполнение джаваскриптовых операций родным либам ибо на джаваскрпте медленно. На самом деле пох зачем, вообщем не пойму как написать на Javascript обраотку. Памагите а?

    Вот такая штука:

     
                // Есть функция
                function funciton1() {
                    // тут всякие обработки
                    // ......
                    // потом идет вызов особой функции
                    // эта функция особая - она асинхронно вызовет function3()
                    // может даже после того как сама закончит таботу
                    window.webkit.messageHandlers.start.postMessage("text");
                    // поэтому тут надо вставить какой то код, который не даст дальше скрипту выполняться
                    // пока не будет выполнена funciton3
                    // а после того, как funciton3 будет выполнена
                    // этот код должен получить то, что она вернула
                    // и вернуть этот результат из этой funciton1
                    // Реально ли такое сделать и как?
                }
    
                function funciton3() {
                    return "ololo";
                }
    
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 8 июня 2015 г. 12:56, спустя 8 минут 28 секунд

    какие прикольные дебри. жду получения большого количества pain in ass :D

    с попкорном.

    Сапожник без сапог
  • kostyl

    Сообщения: 5203 Репутация: N Группа: Джедаи

    Spritz 8 июня 2015 г. 13:12, спустя 16 минут 40 секунд

    @phpdude, ну я просто не очень шарю в JS, но разве нельзя написать какую то хрень которая будут ждать выполнения функции? мне кажется это не так сложно, просто я не знаю такой шаблон

  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 8 июня 2015 г. 13:13, спустя 27 секунд

    Не понял, тебе надо асинхронно-синхронную функцию? Просто объяснение выглядит так "надо чтобы вызвалась функция асихнронно, но код долже ждать результата ее выполнения" - в чем прикол?

    Спустя 59 сек.

    @phpdude, ну я просто не очень шарю в JS

    @kostyl, покажи тоже самое, но не на js, может тогда будет понятнее

    adw/0
  • kostyl

    Сообщения: 5203 Репутация: N Группа: Джедаи

    Spritz 8 июня 2015 г. 13:37, спустя 24 минуты 31 секунду

    @adw0rd, ну может на js будет типа такого? не могу сообразить на чём то другом

    
    function function1() {
        var event = startObserving("event1");
        window.webkit.messageHandlers.start.postMessage("any parameters");
        var resultOfEvent1 = waitUntil(event);
        return resultOfEvent1;
    }
    
    function event1(param) {
        return param + 1;
    }
    

    вообщем перед вызовом _window.webkit.messageHandlers.start.postMessage("any parameters")_ стартует слушатель на функцию event1. Функция _waitUntil_ ждём пока не выполниться функция _event1_ и когда она выполниться вернёт её результат. Причём _startObserving_ и _waitUntil_ не важно какие параметры у _event1_. Может так будет понятнее. А?

    Спустя 49 сек.

    тести _италик_

  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 8 июня 2015 г. 13:43, спустя 5 минут 34 секунды

    @kostyl, тебе промайса не подходят?

    adw/0
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 8 июня 2015 г. 13:44, спустя 45 секунд

    @adw0rd, он вообще про external calls говорит если что ))

    Сапожник без сапог
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 8 июня 2015 г. 13:44, спустя 19 секунд

    если я верно его понял

    Сапожник без сапог
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 8 июня 2015 г. 13:45, спустя 45 секунд

    @adw0rd, он вообще про external calls говорит если что ))

    @phpdude, тогда я вообще не понял ничего, раз ты понял можешь мне другой пример привести? Либо можешь забить, как хочешь)

    adw/0
  • kostyl

    Сообщения: 5203 Репутация: N Группа: Джедаи

    Spritz 8 июня 2015 г. 13:45, спустя 36 секунд

    @kostyl, тебе промайса не подходят?

    @adw0rd, неа, window.webkit.messageHandlers.start.postMessage("); - эта штука делает вызов за пределы браузера, потом из-за пределов браузра вызывается js-функция в браузере

  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 8 июня 2015 г. 13:45, спустя 1 секунду

    @adw0rd, пожалуй забью и понаблюдаю. так интереснее :))

    Сапожник без сапог
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 8 июня 2015 г. 13:49, спустя 3 минуты 42 секунды

    потом из-за пределов браузра вызывается js-функция в браузере

    @kostyl, так функция вызывается из-за пределов или событие наступает?

    Спустя 16 сек.

    рисуй схему)

    adw/0
  • kostyl

    Сообщения: 5203 Репутация: N Группа: Джедаи

    Spritz 8 июня 2015 г. 13:53, спустя 4 минуты 19 секунд

    @kostyl, так функция вызывается из-за пределов или событие наступает?

    @adw0rd, браузер вызывает функцию event1

    Вообщем function1 считай в строке var resultOfEvent1 = waitUntil(event); должна зависнуть и ждать когда браузер вызовет event1 и вернуть её результат. Будем счиать что браузер не зависнет.

     
    function function1() {
        var event = startObserving("event1");
        var resultOfEvent1 = waitUntil(event);
        return resultOfEvent1;
    }
    
    function event1(param) {
        return param + 1;
    }
    
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 8 июня 2015 г. 14:22, спустя 28 минут 20 секунд

    @kostyl,

    1. я бы в startObserving регистрировал функцию и присваивал некий ID (назовем этот storage DefferedItems), после чего запускал какой-то твой удаленный вызов куда-то. startObserving возвращает объект DefferedItem{id: 123, func: 'event1', status: 'wait', result: null, params: []}
    2. event.waitUntil это просто цикл, лучше с setTimeout, который ждет чтобы DefferedItem.status стал resolved. Как только станет resolved, то вернет DefferedItem.result и удалит себя из DefferedItems
    3. Твое внешнее приложение запускает не "event1", а DefferedItem.run(123), который запускает нужную функцию, сохраняет результат и переводит в статус resolved

    params сам думай где хранить, я бы хранил все тамже в DefferedItem + сделал бы возможность передавать доп. параметры прям в DefferedItem.run

    Спустя 121 сек.

    И будет так:

    function function1() {
        var event = startObserving("event1");
        // something
        var resultOfEvent1 = event.waitUntil();
        return resultOfEvent1;
    }
    
    function event1(param) {
        return param + 1;
    }
    
    adw/0

Пожалуйста, авторизуйтесь, чтобы написать комментарий!