Аватар для AlexKOR5
50 / 14 / 3
Регистрация: 15.02.2019
Сообщений: 514

Как отследить, что событие выполняется и как отследить что оно завершилось?

05.08.2020, 20:02. Показов 1819. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как отследить, что событие выполняется и как отследить что оно завершилось?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.08.2020, 20:02
Ответы с готовыми решениями:

Как отследить окно treview что оно активно
Всем привет не подскажите как отследить окно treview что оно активно. Просто у меня файловый менеджер два окна treeview одно слева другое...

Как отследить что рестартит ПК
Я не спец по ОС и железу, подскажите как что делать :) Началось всё с того, что стал вылетать синий экран или виснуть ПК. Иногда вис...

Как отследить что стало инициатором вызова формы и как это использовать?
Здравствуйте) В общем задача, как мне видится тривиальная) но что то не могу придумать решение. Имеем форма1 с 3, 4 ... (n) количеством...

7
the hardway first
Эксперт JS
 Аватар для j2FunOnly
2475 / 1847 / 910
Регистрация: 05.06.2015
Сообщений: 3,610
06.08.2020, 08:48
Цитата Сообщение от AlexKOR5 Посмотреть сообщение
событие выполняется
Я так понимаю, в браузере событие - это атомарная операция. Возможно вы имели ввиду обработчик события?
1
 Аватар для AlexKOR5
50 / 14 / 3
Регистрация: 15.02.2019
Сообщений: 514
06.08.2020, 09:27  [ТС]
Я имел ввиду обработчик события.
0
409 / 162 / 32
Регистрация: 26.11.2019
Сообщений: 434
06.08.2020, 16:25
Пропишите какой-нибудь вывод в консоль, например в начале, середине и конце функции - обработчика
1
 Аватар для AlexKOR5
50 / 14 / 3
Регистрация: 15.02.2019
Сообщений: 514
06.08.2020, 17:39  [ТС]
Пропишите какой-нибудь вывод в консоль, например в начале, середине и конце функции - обработчика

Смотрите с началом и серединой выполнения события ваш вариант подойдет, но как отследить, что событие только что завершилось, чтобы я мог выполнить какие-то действия сразу после этого. Что-то типа Колбека.
0
 Аватар для D_Vik
368 / 234 / 68
Регистрация: 19.07.2016
Сообщений: 833
06.08.2020, 18:18
Паттерн обсервер применяйте.

Добавлено через 34 минуты
Самый простецкий пример (если все правильно понял) выглядит как нибудь так:

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function server(customer) {
 
  let timeout = setTimeout( function() {
 
    customer('Data received')
 
    clearTimeout(timeout)
 
  }, 2000)
}
 
function customer(data) {
 
  console.info(data)
}
 
server(customer)
0
Эксперт JS
6497 / 3908 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
07.08.2020, 16:24
AlexKOR5, Peskova_Sveta, D_Vik, по справочнику Task Asynchronous Pattern:
https://docs.microsoft.com/ru-... g-progress

Вывести на экран слово из текстового поля с ожиданием каждого символа 100 мс:
index.html
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Progress</title>
    <style>
        div{
            height:20px;
        }
    </style>
</head>
<body>
    <input id="source"> <input type="button" id="btn" value="Start">
    <div id="out"></div>
    <div id="status1"></div>
    <progress id="progress1" max="100" value="0"></progress>
    <script src="scripts/app.js"></script>
</body>
</html>
Исходник на TypeScript:
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
type Action<T> = (v: T) => void;
 
interface IProgress<T> {
    report(value: T): void;
}
/*
 * Task.Delay()
 */
const delay = (ms: number) => new Promise(resolve => { setTimeout(resolve, ms); });
/**
 * Упрощенный вариант издателя события без MulticastDelegate
 */
class Progress<T> implements IProgress<T> {
    private _actions: Action<T>[];
 
    constructor(action?: Action<T>) {
        this._actions = [];
        // Аргумент в данном конструкторе может отсутствовать.
        if (action instanceof Function)
            this._actions.push(action);
    }
    report(value: T) {
        for (let action of this._actions)
            action(value);
    }
    /**
     * Упрощенный вариант добавления обработчиков события без MulticastDelegate
     * @param {Action<T>} action Обработчик события с сигнатурой Action<T>
     */
    progressChanged(action: Action<T>) {
        if (!(action instanceof Function))
            throw new Error("Argument is not a function");
        this._actions.push(action);
    }
}
 
let source: HTMLInputElement = <any>document.getElementById("source"),
    btn: HTMLButtonElement = <any>document.getElementById("btn"),
    progress1: HTMLProgressElement = <any>document.getElementById("progress1"),
    out: HTMLDivElement = <any>document.getElementById("out"),
    status1: HTMLDivElement = <any>document.getElementById("status1");
 
btn.onclick = <any>btn_click;
 
async function btn_click(this: HTMLButtonElement) {
    out.textContent = "";
    status1.textContent = "";
    this.disabled = true;
    try {
        await downloadStringAsync(
            source.value,
            new Progress(s => {
                out.textContent = s;
 
                progress1.value = Math.floor(s.length / source.value.length * 100);
            }));
        // Любые действия после завершения обработчика события
        status1.textContent = "Вывод на экран завершен.";
    }
    catch (error) {
        status1.textContent = "Ошибка вывода на экран.";
    }
    finally {
        this.disabled = false;
    }
}
 
 
async function downloadStringAsync(str: string, progress: IProgress<string>) {
    let s = "";
    for (let e of str) {
        await delay(100);
        s += e;
        progress.report(s);
    }
}
Результат компиляции в JavaScript:
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
/*
 * Task.Delay()
 */
const delay = (ms) => new Promise(resolve => { setTimeout(resolve, ms); });
/**
 * Упрощенный вариант издателя события без MulticastDelegate
 */
class Progress {
    constructor(action) {
        this._actions = [];
        // Аргумент в данном конструкторе может отсутствовать.
        if (action instanceof Function)
            this._actions.push(action);
    }
    report(value) {
        for (let action of this._actions)
            action(value);
    }
    /**
     * Упрощенный вариант добавления обработчиков события без MulticastDelegate
     * @param {Action<T>} action Обработчик события с сигнатурой Action<T>
     */
    progressChanged(action) {
        if (!(action instanceof Function))
            throw new Error("Argument is not a function");
        this._actions.push(action);
    }
}
let source = document.getElementById("source"), btn = document.getElementById("btn"), progress1 = document.getElementById("progress1"), out = document.getElementById("out"), status1 = document.getElementById("status1");
btn.onclick = btn_click;
async function btn_click() {
    out.textContent = "";
    status1.textContent = "";
    this.disabled = true;
    try {
        await downloadStringAsync(source.value, new Progress(s => {
            out.textContent = s;
 
            progress1.value = Math.floor(s.length / source.value.length * 100);
        }));
        // Любые действия после завершения обработчика события
        status1.textContent = "Вывод на экран завершен.";
    }
    catch (error) {
        status1.textContent = "Ошибка вывода на экран.";
    }
    finally {
        this.disabled = false;
    }
}
async function downloadStringAsync(str, progress) {
    let s = "";
    for (let e of str) {
        await delay(100);
        s += e;
        progress.report(s);
    }
}
Тут как раз случай, когда скрипт без исходника на TypeScript не имеет никакой ценности.
1
 Аватар для D_Vik
368 / 234 / 68
Регистрация: 19.07.2016
Сообщений: 833
07.08.2020, 16:32
А в чем смысл дженериков ? Это ж по сути тоже самое что и any.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.08.2020, 16:32
Помогаю со студенческими работами здесь

Как отследить, что пользователь закрыл форму?
Добрый день! Подскажите, как отследить, что именно пользователь, а не программа закрыла форму? У формы есть событие &quot;Closing&quot;....

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

Как отследить в Edit, что пользователь нажал Enter?
Господа извеняюсь за такой наивный вопрос , но что то совсем не получается сделать . Как отследить в Edit , что пользователь нажал Enter...

Как отследить что форма не перекрыта другими окнами
Доброго времени суток! Есть форма, нужно отследить момент когда эту форму не перекрывают другие окна, т.е когда пользователь ее видит...

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


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

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

Новые блоги и статьи
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru