Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   "не блокирующий" alert (https://javascript.ru/forum/misc/51206-ne-blokiruyushhijj-alert.html)

voral 28.10.2014 15:04

"не блокирующий" alert
 
Есть необходимость прервать действие скрипта(показав сообщение), пока пользователь не сказал "поехали" (нажал кнопку ок). При этом код нельзя разделять на отдельные части/функции. Т.е. в принципе решение такое в рамкахс странички действует как мне надо:
funcion fooo(){
  console.log('step1');
  alert('waiting');
  console.log('step2');
}

Проблема в том, что пока открыто окно алерта неполучается открыть другую вкладку браузера, а мне эта возможность нужна.

Пока в идее показать некий div c кнопкой. А после загнать в цикл пока некая глобальная переменная не примет занчение, например, true. Соответсвенно менять ее нажатием при клике в открытом блоке.

Но, что то мне эта идея кажется велосипедной. Есть какое либо решение по феншую?

Aetae 28.10.2014 15:21

Цитата:

При этом код нельзя разделять на отдельные части/функции.
Это высосанное из пальца говнокодерское условие. Код надо разделять на отдельные части/функции.
Пока вы это не поймёте - вам нечего делать в программировании.

P.S. Ответ на конкретный вопрос: решения кроме уё*ного вечного цикла загружающего процессор пользователя на 100%, либо alert\confirm\prompt - нет. И не будет, ибо противоречит парадигме языка.

danik.js 28.10.2014 15:24

Цитата:

Сообщение от voral
А после загнать в цикл пока некая глобальная переменная не примет занчение, например, true.

А как она примет такое значение, если браузер будет исполнять твой цикл? JS то однопоточный.

kobezzza 28.10.2014 15:29

Если есть поддержка генераторов, то можно использовать yield, гуглится на раз.

Цитата:

И не будет, ибо противоречит парадигме языка.
Уже есть :) yield

kobezzza 28.10.2014 15:33

Цитата:

Сообщение от danik.js (Сообщение 338046)
А как она примет такое значение, если браузер будет исполнять твой цикл? JS то однопоточный.

Ну, подобие потоков делается на основе генераторов.

Пример с использованием Collection и интервального слипа потока

$C([true]).forEach(function () {
    this.sleep(1e3, function () {
        if (тут наше условие) {
            return true; // Отменяем цикличный sleep
        }
    }, true);
}, {thread: true});

voral 28.10.2014 15:38

Цитата:

Сообщение от danik.js
JS то однопоточный.

Ох. черт что, то я упустил из виду...... Придется два браузера юзать.
[OFF]
Aetae, позвольте мне самому решать кем быть с учетом моего стажа - мне поздно куда либо сваливать. Если "код разбивать" это приведет к значительному усложнению функционала. Вы ж не знаете, что я делаю и зачем мне это нужно. За юзеров не волнуйтесь, поскольку это нужно только мне. Я фигею с таких недоэкстрасенсов.
[/OFF]

voral 28.10.2014 15:38

kobezzza, спасибо

Aetae 28.10.2014 15:49

Цитата:

Сообщение от kobezzza (Сообщение 338047)
Уже есть :) yield

yield это всё же иное.

kobezzza 28.10.2014 15:52

Цитата:

Сообщение от Aetae (Сообщение 338052)
yield это всё же иное.

Ну почему? Он позволяет делать потоки, делать слипы, и приводить асинхронные операции в псевдосинхронные, великая вещь!:)

Aetae 28.10.2014 15:53

...а будет применяться для говнокода -_-.


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