Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
-15 / 0 / 0
Регистрация: 12.11.2020
Сообщений: 335

Асинхронность - раздельный запуск функций

13.07.2025, 12:38. Показов 4542. Ответов 130
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пришел к тому, что давно пора было заняться вопросами, связанными с асинхронностью (как не раз советовали более опытные товарищи). И вот появился вопрос, если кого не затруднит с ответом:

HTML5
1
2
3
4
 <button onclick = "f0_1 ();" class="knReg_but" > f0_1 </button>
 <br><br>
 <span id="inf1" class= "abs" style="color: darkblue;">     </span>
 <span id="inf2"  style="color: red;">  </span>
JavaScript
1
2
3
4
5
6
7
8
9
10
 f0 ();
 
function f0 () { 
   setTimeout("p0 = '111111111111';", 3000);
}
function f0_1 () { 
 if (typeof (st_g) !== 'undefined')
     inf1.innerHTML = p0;   
 inf2.innerHTML = typeof (p0);
}
Пример тестовый. В чем сложность.
f0 () и f0_1 () запускаются независимо. Причем f0 () сразу же и только один раз.
f0_1 () может запускаться неоднократно. Но вот при первом запуске f0_1 () переменная p0 может не успеть сформировать. И не знаю, какой механизм оптимальнее использовать для ожидания загрузки.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.07.2025, 12:38
Ответы с готовыми решениями:

Как сделать раздельный скроллинг вертикальных блоков, как на news.mail.ru?
Образец: http://news.mail.ru/inregions/siberian/55/economics/11958019/?frommail=1 Если страницу...

Асинхронность javascript
Не уверен, является ли то, о чём хочу спросить, асинхронностью. И может я чего-то не понимаю. Но...

NodeJS асинхронность
Помогите разобраться с асинхронностю. var test = function(data, callback){ for(var i = 0;...

130
Эксперт JSЭксперт HTML/CSS
 Аватар для krvsa
3800 / 1631 / 428
Регистрация: 14.03.2022
Сообщений: 4,069
16.07.2025, 14:33
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от 755 Посмотреть сообщение
искал оптимальный вариант
И выбрал самое замудренное...

Цитата Сообщение от 755 Посмотреть сообщение
Другой вариант - css переменные, которые формирую с помощью js
Это, видать, очередной велосипед...
1
 Аватар для voraa
1222 / 1114 / 173
Регистрация: 21.01.2024
Сообщений: 5,099
16.07.2025, 14:43
Цитата Сообщение от 755 Посмотреть сообщение
И не знаю, какой механизм оптимальнее использовать для ожидания загрузки.
Самый обычный механизм - это промисы.
Я бы мог вам показать на вашем примере как это делается, но ваши примеры понять невозможно.
Вы пишете какие то неполные обрывки. Вот сами посмотрите на него? И не глядя в другие места (которых у нас нет) скажите, что такое st_g откуда оно берется, где, когда и какое значение ей присваивается?
0
Заблокирован
16.07.2025, 14:46
Цитата Сообщение от krvsa Посмотреть сообщение
Это, видать, очередной велосипед...
Ты просто не понимаешь логику ТС. Прерывания это обработчики событий. Отправить запрос на сервер это получить данные с LocalStorage, а в улучшенном варианте из десяти функций это данные из IndexedDB. Чел прошаренный. Его на мякине не проведешь
0
-15 / 0 / 0
Регистрация: 12.11.2020
Сообщений: 335
16.07.2025, 15:07  [ТС]
Цитата Сообщение от voraa Посмотреть сообщение
Вы пишете какие то неполные обрывки. Вот сами посмотрите на него? И не глядя в другие места (которых у нас нет) скажите, что такое st_g откуда оно берется,
voraa, уже извинялся, но считаю не лишним извиниться еще раз за свою невнимательность: мне помогают, поэтому стараюсь проявлять уважение, в частности: чтобы было понятно, но, увы... непросто изменить свою натуру, если уж был у меня и такой случай: домой приезжаю, супруга занесла на кухню диван, а я сразу и не заметил.
- st_g это просто переменная для отладки, удалял лишние операторы, чтобы не отвлекали, и видимо пропустил. Хотя и проверяю публикуемое и не один раз проверяю


Спасибо за предложение, попробую пока сам на основе новых советов доделать, а потом уже неспеша без ошибок подготовлю если что пример
0
 Аватар для voraa
1222 / 1114 / 173
Регистрация: 21.01.2024
Сообщений: 5,099
16.07.2025, 15:17
Цитата Сообщение от krvsa Посмотреть сообщение
Сообщение от 755
Другой вариант - css переменные, которые формирую с помощью js
Это, видать, очередной велосипед...
Ну вообще то иногда приходится и так делать.
0
-15 / 0 / 0
Регистрация: 12.11.2020
Сообщений: 335
16.07.2025, 21:00  [ТС]
Добрый вечер, voraa!
Склоняюсь к мнению, что не ошибался в плане использования рекурсии и ее применения, если переменные или код на пред. этапе не успеют загрузиться. Хотя и безусловно буду помнить о Вашем мнении при дальнейшей проверки кода на вопрос зацикливания.
Почему опять к этому вернулся: формировал последовательный запуск 3-х функций по мере готовности данных из предыдущей.
С 2-й функцией frm_mIsk () все хорошо, а вот в 3-й q_zagF2 () уже действительно произошло зацикливание (пришлось поставить счетчик для прерывания) - к тому, что если зацикливание происходит, его действительно легко увидеть.

Вот что получилось на текущий момент (пример рабочий), у меня только БД содержит данные, которые действительно формируются в массив m_isk []:

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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
 var k_iter= 0;
 
 var idb_nam_db= ["myBase", 1];
 var idb_nam_xr= "isk_arKv";
 idb_nam_xr= "film";
 
 var idb_db;        // db
 
 var m_isk = new Array;
 
 
// =================================
promise = idb_open();       // имя объекта промиса
promise.then (st => { idb_db= st; })        // результат промиса 
frm_mIsk ();
q_zagF2 ();
 
 
function idb_open ()  {
    return new Promise(function(resolve, reject) {
    //promise= new Promise(function(resolve, reject) {
    const openRequest = indexedDB.open(idb_nam_db[0], idb_nam_db[1]); 
 
 openRequest.onupgradeneeded = function() {
     alert ("Сработало событие 'onupgradeneeded'");
    idb_db = openRequest.result;
    let store = idb_db.createObjectStore('isk_arKv', { autoIncrement: true });
 };
 
    openRequest.onsuccess = () => resolve(openRequest.result);
 
    openRequest.onerror = function () {
            reject(openRequest.error);
        }
    })
}
 
 
// ===========================
function idb_frmMas (nm_xr) {
    return new Promise((resolve, reject) => {
    //   let nm_xr= 'film';
    //   nm_xr= 'isk_arKv';
    //alert (nm_xr)
        const txn = idb_db.transaction(nm_xr, 'readonly');
        const p_xr = txn.objectStore(nm_xr);
        let query = p_xr.getAll();
        query.onsuccess = (event) =>{
            const m = event.target.result;
            resolve(m ? m : null);
        };
        query.onerror = err => reject(err.target.errorCode)
    })
}
 
var prom;
 
function frm_mIsk ()  {
 prom=  new Promise((resolve, reject) => {
 if (typeof idb_db === 'undefined') {
        //alert ("frm_mIsk () │ undefined ")
        inf2.innerHTML =  "ERROR │ typeof (idb_db) === 'undefined'";
        promise.then (st => { frm_mIsk() ; return;  })  // alert (" * 1 *");
 
 }
 
 else   {
    //alert ("frm_mIsk () │ Запуск функции ")
    let idb_nam_xr= "isk_arKv";
 
    idb_frmMas (idb_nam_xr)
    // idb_frmMas ()
        .then(m => {
            if (m) {m_isk= m; alert (m_isk); inf1.innerHTML = " m_isk= "+ m_isk; }  // alert (m_isk)
            else inf2.innerHTML = "  "+ nam_xr+ " empty !!!"
        })
        .catch(err => inf2.innerHTML = "onerror │ "+ err)
 
    inf2.innerHTML = " ";
 }
 })
}
 
 
// =========================================
function q_zagF2 ()     {
if (typeof m_isk[0] === 'undefined')    {
    alert ("frm_mIsk () │ typeof (m_isk)= "+ typeof (m_isk)+
        "\n m_isk[0]="+ m_isk[0]+ "\n m_isk[1]="+ m_isk[1]); 
    k_iter++;
    if (k_iter < 3)
        prom.then (q_zagF2 ())  //alert ("frm_mIsk ()");
    else
        alert ("ERROR ! k_iter>=3 ==" + k_iter )
 
}
else    {
 
    alert ("q_zagF2 │ k_iter= "+ k_iter)
    alert ("q_zagF2 │ m_isk= "+ m_isk)    
 
}   
}
0
 Аватар для voraa
1222 / 1114 / 173
Регистрация: 21.01.2024
Сообщений: 5,099
16.07.2025, 22:47
Вы не пробиваемы, не обучаемы.
Делайте как хотите.
1
-15 / 0 / 0
Регистрация: 12.11.2020
Сообщений: 335
17.07.2025, 08:16  [ТС]
Цитата Сообщение от voraa Посмотреть сообщение
Вы не пробиваемы, не обучаемы.
Делайте как хотите.
Независимо от Вашего мнения, благодарю Вас и всех, помогавших в теме, за помощь - она была очень полезной.
0
Заблокирован
17.07.2025, 08:32
755, послушай меня еще раз. У тебя главная проблема это не код, а твоя логика. Код написать это ерунда. Важно понимать, как это работает и для чего это надо. Не с бухты-барахты делать асинхронные операции, а по мере необходимости. Разобраться как клиент общается с сервером и как сервер возвращает данные. Ну, и так далее.
2
-15 / 0 / 0
Регистрация: 12.11.2020
Сообщений: 335
17.07.2025, 21:52  [ТС]
Цитата Сообщение от black1385 Посмотреть сообщение
У тебя главная проблема это не код, а твоя логика. Код написать это ерунда. Важно понимать, как это работает и для чего это надо. Не с бухты-барахты делать асинхронные операции, а по мере необходимости. Разобраться как клиент общается с сервером и как сервер возвращает данные.
black1385, прошу прощения, ошибся, думал ничего, кроме язвительности от вас нельзя ожидать, поэтому не интересовался темой.

За совет отдельное спасибо.

Извините, что в целом с советом не согласен:
По-моему неразумно судить о чужой логике, о которой практически ничего не знаешь. Хотя согласен с тем, что логика важнее кода. Но и логика не спасет, если не понимаешь каких-то важных механизмов программирования (с этим как раз столкнулся сейчас и сам)
Позвольте остаться при своем мнении - с логикой у меня в основном все в порядке (и для такой самоуверенности у меня есть основания). Ну и давайте потерпим (боюсь зарекаться на счет сроков), а когда размещу продукт - вот тогда станет ясно, прав ли был я или большинство из данной темы.

Цитата Сообщение от black1385 Посмотреть сообщение
Не с бухты-барахты делать асинхронные операции
Только сегодня утром подумал, а зачем мне асинхронная работа трех функций последовательно, если для работы третьей нужны данные второй - стоит от нее отказаться.
А потом вспомнил, что не все так просто - с чего началось изучение асинхронных операций: в одной из предыдущих тем krvsa, помог решить проблему сохранения данных indexedDB, реализовав через промисы. (Это у меня вторая функция). А в ней данный формируются через обработчик событий .onsuccess и, если правильно понял, к сожалению, а м.б. и нет без асинхронных операций не обойтись.
Хотя и повторюсь к данному совету: выбору асинхронности пришел сегодня утром и сам, решив асинхронность (как серьезную тему) изучать параллельно с дальнейшим программированием других элементов.

Самое главное, мне сейчас надо в первую очередь самому подумать и действительно определиться с алгоритмом
0
 Аватар для sad67man
2600 / 1504 / 689
Регистрация: 23.08.2015
Сообщений: 3,804
18.07.2025, 02:16
Цитата Сообщение от 755 Посмотреть сообщение
Пример простой:
1. f1() - открытие БД indexedDB
2. f2(имя хранилища) - чтение данных из заданного хранилища → m_dat[]
3. f3() - использование m_dat[] (у меня не успевают сформироваться)
А вот для этого случая и мне рекурсия не нравится. Пытаюсь найти другое решение
Ну тут конечно возникает вопрос, а что у вас 3-я функция сама лезет куда-то за данными в глобальную область видимости? Почему их нельзя передать в качестве параметра?

Получается смысл ваших рекурсий - дождаться результата выполнения других функций, хотя промисы сами сигнализируют о своей готовности. Т.е. уже тут вместо переменной idb_db, где вы храните подключение можно везде использовать сам промис

К примеру
JavaScript
1
2
3
4
5
6
7
8
9
let dbPromise = getDb();
let dataPromise = getData(dbPromise);
useData(dataPromise);
 
function useData(dataPromise => {
  dataPromise.then(data => { // дожидаемся получения данных.. если они уже получена, то then сработает сразу.
    alert(data[0])
  })
})
1
-15 / 0 / 0
Регистрация: 12.11.2020
Сообщений: 335
18.07.2025, 10:00  [ТС]
Доброе утро, sad67man!
Нравится Ваш вариант - естественный, наглядный.
Если правильно понял (в моей терминологии):
JavaScript
1
2
let dbPromise = getDb(); // открытие БД indexedD
let dataPromise = getData(dbPromise);  // чтение данных из заданного хранилища
Не знаю, подойдет ли к моему случаю, но попробую (подумаю над его реализацией).

Цитата Сообщение от sad67man Посмотреть сообщение
Почему их нельзя передать в качестве параметра?
Возможно, можно, но они у меня определены как глобальные, потому что используются в разных местах кода - поэтому и не вижу смысла в передаче их как параметров

Да, Вы правильно поняли смысл рекурсии во 2-й функции (почему и считаю, что не происходит зацикливания) - если данные не успели сформироваться, она ждет результата промиса.
promise.then (st => { frm_mIsk() ; }) - метод then ставится в очередь и рекурсия срабатывает только при наступлении результата.
А для 3-й функции как раз этого и не происходило (причина зацикливания) - не формировался положительный результат промиса f2, поэтому и нашел иное решение (уже без рекурсии):

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
function frm_mIsk ()  {
 prom=  new Promise((resolve, reject) => {
 if (typeof idb_db === 'undefined') {
        promise.then (st => { frm_mIsk() ; })   // alert (" * 1 *");
 }
 
 else   {
    let idb_nam_xr= "isk_arKv";
     idb_frmMas (idb_nam_xr)
        .then(m => {
        // let nam_fun= "q_zagF2";
            if (m) {m_isk= m; window [nam_fun](); }  // данные сформированы - можно вызвать f3()
            else inf2.innerHTML = "  "+ nam_xr+ " empty !!!"
        })
        .catch(err => inf2.innerHTML = "onerror │ "+ err)
 }
 })
}
 
function q_zagF2 ()     {
if (typeof m_isk[0] === 'undefined')    {
    nam_fun= "q_zagF2";
}
else    {
    alert ("q_zagF2 │ m_isk= "+ m_isk)    
    // выполняются какие-то действия
}   
}
По логике также используется готовность промиса и он вызывает 3-ю функцию, если нужная переменная не определена

Но Ваш вариант намного нагляднее и, соответственно, предпочтительнее

Ps.
Подумал, надо уточнить свою позицию - не хочу, чтобы подумали, что утверждаю что-либо - только вижу такое объяснение (вполне возможно, какие-то рассуждения и ошибочны)
0
 Аватар для sad67man
2600 / 1504 / 689
Регистрация: 23.08.2015
Сообщений: 3,804
18.07.2025, 12:24
Цитата Сообщение от 755 Посмотреть сообщение
если данные не успели сформироваться, она ждет результата промиса.
Цитата Сообщение от 755 Посмотреть сообщение
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function frm_mIsk ()  {
 prom=  new Promise((resolve, reject) => {
 if (typeof idb_db === 'undefined') {
        promise.then (st => { frm_mIsk() ; })   // alert (" * 1 *");
 }
else   {
    let idb_nam_xr= "isk_arKv";
     idb_frmMas (idb_nam_xr)
        .then(m => {
        // let nam_fun= "q_zagF2";
            if (m) {m_isk= m; window [nam_fun](); }  // данные сформированы - можно вызвать f3()
            else inf2.innerHTML = "  "+ nam_xr+ " empty !!!"
        })
        .catch(err => inf2.innerHTML = "onerror │ "+ err)
 }
 })
}
Ну вот допустим здесь, зачем рекурсия, когда можно просто всегда ожидать промис, ведь он сохраняет результат.
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function frm_mIsk() {
    prom = new Promise((resolve, reject) => {
        promise.then(idb_db => {
            let idb_nam_xr = "isk_arKv";
            idb_frmMas(idb_nam_xr)
                .then(m => {
                    // let nam_fun= "q_zagF2";
                    if (m) {
                        m_isk = m;
                        window [nam_fun]();
                    } // данные сформированы - можно вызвать f3()
                    else inf2.innerHTML = " " + nam_xr + " empty !!!"
                })
                .catch(err => inf2.innerHTML = "onerror │ " + err)
        })
    })
}
По поводу вызорва f3().. то что она и обрабатывает данные и сама проверяет - это уже нарушение принципов.. тут как минимум лучше разделить на 2 функции, одна непосредственно обрабатывает данные, а другая уже управляющая, которая принимает решение когда и как ее вызывать..

JavaScript
1
window [nam_fun]();
Ну вот вы по сути использовали мою идею, когда вы подставляете функцию, и она сама вызывается по готовности.. но это лишняя зависимость. Наверное более грамотно выкидывать событие о готовности данных. Вы даже можете их передать.

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
let m_isk = [];
 
function frm_mIsk() {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            m_isk = ['test1', 'test2'];
            window.dispatchEvent( new CustomEvent('m_isk.ready', {detail : m_isk}) );
        }, 2000);
    })
}
 
function useData(data) {
    alert(data[0]);
}
 
function waitUseData() {
    if (typeof m_isk[0] === 'undefined')    {
        window.addEventListener('m_isk.ready', (event) => {
            useData(event.detail);
        }, {once: true});
 
        return;
    }
 
    useData(m_isk);
}
 
 
frm_mIsk();
waitUseData();
1
-15 / 0 / 0
Регистрация: 12.11.2020
Сообщений: 335
18.07.2025, 12:39  [ТС]
Цитата Сообщение от sad67man Посмотреть сообщение
Ну вот вы по сути использовали мою идею, когда вы подставляете функцию, и она сама вызывается по готовности.. но это лишняя зависимость.
sad67man, к этой идеи мы пришли параллельно, а это говорит о том, что она действительно заслуживает внимания. Хотя Ваша реализация интереснее.

Пока только благодарю за советы, нужно время, чтобы с ними ознакомиться и понять, как их внедрить в код - дело в том, что алгоритм у меня сложнее, например, данные для 3-й функции у меня могут формироваться только один раз для ряда запросов, поэтому уже появляется анализ и возможный пропуск функции 2.

Прощаюсь на форуме быстрей всего до завтра.
0
 Аватар для sad67man
2600 / 1504 / 689
Регистрация: 23.08.2015
Сообщений: 3,804
18.07.2025, 13:03
Цитата Сообщение от 755 Посмотреть сообщение
к этой идеи мы пришли параллельно, а это говорит о том, что она действительно заслуживает внимания. Хотя Ваша реализация интереснее.
Ну наверное это имеет смысл когда нам не известно выpывалась ли функция f2 - и будет ли вообще вызвана и когда она все-таки будет вызвана в будущем нам нужно как-то к ней прицепиться..
В реальном проекте мне трудно представить такую ситуацию.. и это больше похоже на какой-то дикий костыль..

Но даже эту штуку можно обернуть в промис.. Тогда все остальные функции, использующие эти данные хотябы не пострадают) Т.е. можно попытаться этот костыль локализовать

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function waitData() {
    return new Promise((resolve) => {
        if (typeof m_isk[0] === 'undefined')    {
            window.addEventListener('m_isk.ready', (event) => {
                resolve(event.detail);
            }, {once: true});
 
            return;
        }
        resolve(m_isk);
    });
}
 
waitData().then(data => {
    useData(data);
})
Тогда эту штуку кстати можно будет повторно использовать.

В любом случае такого лучше избегать.. Лучше использовать прямые цепочки.. Если функция f2 не вызывалась, то тогда и не стоит вызывать f3().. Иначе такое будет очень сложно поддерживать, вас потом другие программисты, будут долго вспоминать)
1
-15 / 0 / 0
Регистрация: 12.11.2020
Сообщений: 335
18.07.2025, 19:57  [ТС]
Цитата Сообщение от sad67man Посмотреть сообщение
когда нам не известно выpывалась ли функция f2 - и будет ли вообще вызвана и когда она все-таки будет вызвана в будущем нам нужно как-то к ней прицепиться..
В реальном проекте мне трудно представить такую ситуацию.. и это больше похоже на какой-то дикий костыль..
Ну почему же, вот Вам примерный пример того, что планирую реализовать: будет массив id выбранных элементов для раздела Избранное (встречается часто: в кадрах, недвижимости, маркетплейсах, ..). Мало того, Избранное у меня может еще классифицироваться по какому-либо признаку. Храниться id будут в indexedDB (это гораздо удобнее, чем sql).

Алгоритм работы (примерный) и не единственный:
• открытие БД - при запуске режима - асинхронно / f1()/
• анализ - есть ли сформированный массив id или нет + подходит ли он или нет для данного режима
- если нет - формирование из хранилища массива id /в нашей терминологии f2() - получается асинхронно из-за особенностей indexedDB, хотя т.к. работа на клиенте - это и не так важно/
• Режим Избранное - работа с данным массивом, в т.ч. и на сервере - / f3()/
Первые два пункта запускаются автоматически при определенных условиях, 3-й же обычный интерактивный режим
0
Заблокирован
18.07.2025, 20:13
Цитата Сообщение от 755 Посмотреть сообщение
Избранное у меня может еще классифицироваться по какому-либо признаку. Храниться id будут в indexedDB (это гораздо удобнее, чем sql).
Цитата Сообщение от 755 Посмотреть сообщение
Режим Избранное - работа с данным массивом, в т.ч. и на сервере
То есть, будешь работать на сервере с массивом, который выдернешь из indexedDB, потому что это удобнее? Да... это логика очень интересная. Я бы даже сказал, очень оригинальная
Хочу задать еще один вопрос. Как думаешь, для чего придумали в программировании функции?
0
-15 / 0 / 0
Регистрация: 12.11.2020
Сообщений: 335
18.07.2025, 20:24  [ТС]
Цитата Сообщение от black1385 Посмотреть сообщение
Как думаешь, для чего придумали в программировании функции?
Не думал и не думаю, что кому-то будут интересны по этому поводу мои думы
0
Заблокирован
18.07.2025, 20:44
Цитата Сообщение от 755 Посмотреть сообщение
Не думал и не думаю
Я тогда расскажу, как я думаю. Функции придумали, что бы не дублировать код и вызывать их из различных частей программы многократно. Нет смысла писать код функцию и использовать её только один раз. Это противоречит здравому смыслу.
0
 Аватар для voraa
1222 / 1114 / 173
Регистрация: 21.01.2024
Сообщений: 5,099
18.07.2025, 20:49
Я вообще. С большим трудом понимаю назначение IndexedDB.
Делать какое то приложение чисто для себя, для работы на одном устройстве?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.07.2025, 20:49
Помогаю со студенческими работами здесь

Асинхронность
Всем привет) Я новичек в ноде, разрабатываю веб сервер. this.tokens.get(token, function(msg,...

Асинхронность в nodejs
Здравствуйте, никак не пойму как работает асинхронность в nodejs, к примеру пускай есть 2 события...

Асинхронность в js
почему в консоле не находит переменную obj, но когда убираю setTimout, только тогда находит ...

Асинхронность, многопоточность и тд
Здравствуйте! Есть NodeJS, подписка на события(приходят по websocket) и много условий if .....

SetTimeout, clearTimeout - асинхронность, однопоточность
Как это работает? почему, запуская множество setTimeout, внутри setInterval, фиксируя остановку...


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

Или воспользуйтесь поиском по форуму:
120
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru