Действие "Яваскрипт"



  • Добрый день.
    Я ввожу в консоль браузера следующий яваскрипт:

    let openRequest = indexedDB.open("name", 1);
    openRequest.onsuccess = function() {
    	let db = openRequest.result;
    	let loot = db.transaction("name").objectStore("name");
    	let request = loot.get("key");
    	request.onsuccess = function() {
    		console.log(request.result);
    		}
    	};
    

    Получаю в консоли бразура функцию JS и лог request.result. При этом, если я использую действие "Яваскрипт" в бас, то получаю в переменную SAVED_SCRIPT_RESULT только функцию JS. Как мне записать request.result в переменную?



  • Попробовал вывести в консоль значение request.result через глобальные переменные:

    let openRequest = indexedDB.open("name", 1);
    openRequest.onsuccess = function() {
    	let db = openRequest.result;
    	let loot = db.transaction("name").objectStore("name");
    	let request = loot.get("key");
    	request.onsuccess = function() {
    		res = request.result;
    		}
    	};
    res
    

    В консоли браузера выводится именно необходимое мне значение, но если я использую этот же код в действии "Яваскрипт", то получаю пустое значение в SAVED_SCRIPT_RESULT. В чём проблема?



  • @ZGVhZGg4ZXI Попробуй так:

    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;
    


  • @DoobGuy said in Действие "Яваскрипт":

    @ZGVhZGg4ZXI Попробуй так:

    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;
    

    Там, наверное, точки с запятой после res=r.result не хватает, но всё равно - в консоли работает, а в BAS не работает.



  • @ZGVhZGg4ZXI бас код к строке приводит, при этом не добавляет переносов. Не удобно и не очевидно. Поэтому надо везде ставить точку с запятой



  • Когда не работает 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 Действие "Яваскрипт":

    Если я правильно понял ваш совет

    Нет, вы его поняли не правильно. Он имел ввиду объявить глобальную переменную в вашем коде, использовать этот код в действии "яваскрипт", завершить действие и использовать действие "сон" в цикле с проверкой следующего действия "яваскрипт", которое будет проверять содержание этой глобальной переменной.

    Наверное, я снова не правильно понял, т.к. получить желаемый результат не удалось.
    В БАС выглядит так:
    dc55d3a0-1a7d-45a4-a254-3e615f876354-image.png
    Где первое действие "яваскрипт" содержит код:

    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;
    	};
    };
    

    Почему-то я не могу обратиться к глобальной переменной, объявленной в другом действии "яваскрипт". Для проверки использовал следующие простые действия
    1c3e29ab-d116-43c4-807a-bf4a0de39c94-image.png
    Тут я получаю SAVED_SCRIPT_RESULT: "0" и RES_JS: "". Если я правильно понял ваш совет, то я должен получить RES_JS: "0".



  • @ZGVhZGg4ZXI объявите переменную без приставки var

    1385.xml



  • Большое спасибо!


Log in to reply