Но появилась новая проблема. Иногда скрипт во время работы внезапно запрещает выделять действия. Т.е при клике на любое действие, оно просто не выделяется красным. Это второй баг, независимый от первого если что
Действие "Яваскрипт"
-
Когда не работает JS, я использую исправление (http://www.jsnice.org/) и перевод в строку (https://seogift.ru/tools/upakovka-javascript/), это иногда помогает
-
@UserTrue said in Действие "Яваскрипт":
@ZGVhZGg4ZXI бас код к строке приводит, при этом не добавляет переносов. Не удобно и не очевидно. Поэтому надо везде ставить точку с запятой
Проставил везде точки с запятой, где не было. Итог прежний - в консоли работает, а в BAS не работает.
let openRequest = indexedDB.open("name", 1); openRequest.onsuccess = function(){ let db = openRequest.result; let pro6pp_cache = db.transaction("name").objectStore("name"); let r = pro6pp_cache.get("key"); r.onsuccess = function(){ res = r.result; }; }; window.res; -
@ZGVhZGg4ZXI бас не ждёт асинхронный код, если вы ожидаете получить результат
-
@UserTrue said in Действие "Яваскрипт":
@ZGVhZGg4ZXI бас не ждёт асинхронный код, если вы ожидаете получить результат
Разве можно написать синхронный код, если .result определён только внутри функции onsuccess?
-
@ZGVhZGg4ZXI можете просто дальше в бас в цикле проверять появился или нет результат в нужной переменной
-
@UserTrue said in Действие "Яваскрипт":
@ZGVhZGg4ZXI можете просто дальше в бас в цикле проверять появился или нет результат в нужной переменной
Если я правильно понял ваш совет, то должно быть нечто подобное:
let openRequest = indexedDB.open("name", 1); let res = 0; openRequest.onsuccess = function(){ let db = openRequest.result; let pro6pp_cache = db.transaction("name").objectStore("name"); let r = pro6pp_cache.get("key"); r.onsuccess = function(){ res = r.result; }; }; for(;;){ if(res) break; }Если да, то, к сожалению, не работает.
-
@ZGVhZGg4ZXI said in Действие "Яваскрипт":
Если я правильно понял ваш совет
Нет, вы его поняли не правильно. Он имел ввиду объявить глобальную переменную в вашем коде, использовать этот код в действии "яваскрипт", завершить действие и использовать действие "сон" в цикле с проверкой следующего действия "яваскрипт", которое будет проверять содержание этой глобальной переменной.
-
@Fox said in Действие "Яваскрипт":
@ZGVhZGg4ZXI said in Действие "Яваскрипт":
Если я правильно понял ваш совет
Нет, вы его поняли не правильно. Он имел ввиду объявить глобальную переменную в вашем коде, использовать этот код в действии "яваскрипт", завершить действие и использовать действие "сон" в цикле с проверкой следующего действия "яваскрипт", которое будет проверять содержание этой глобальной переменной.
Наверное, я снова не правильно понял, т.к. получить желаемый результат не удалось.
В БАС выглядит так:

Где первое действие "яваскрипт" содержит код:let openRequest = indexedDB.open("name", 1); var res = 0; openRequest.onsuccess = function(){ let db = openRequest.result; let pro6pp_cache = db.transaction("name").objectStore("name"); let r = pro6pp_cache.get("key"); r.onsuccess = function(){ res = r.result; }; };Почему-то я не могу обратиться к глобальной переменной, объявленной в другом действии "яваскрипт". Для проверки использовал следующие простые действия

Тут я получаю SAVED_SCRIPT_RESULT: "0" и RES_JS: "". Если я правильно понял ваш совет, то я должен получить RES_JS: "0". -
@ZGVhZGg4ZXI объявите переменную без приставки
var -
Большое спасибо!