Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.05.2019, 21:20
Новичок на форуме
Отправить личное сообщение для HelloIm Посмотреть профиль Найти все сообщения от HelloIm
 
Регистрация: 15.05.2019
Сообщений: 5

Не видно переменных после функции
var tokens;
 var token;
 
            function logerr(err) {
                console.log('Database erroor: ',err);
            }
            function connectDB(f) {
                const request =  indexedDB.open('library', 1);
                request.onerror = logerr;
                request.onsuccess = function() {
                    f(request.result);
                };
                request.onupgradeneeded = function(e) {
             e.currentTarget.result.createObjectStore('users', { keyPath: 'uid' });
                    connectDB(f);
                };
            }
                  connectDB(db => {
                
                   var tx = db.transaction("users", "readonly");
                   var store = tx.objectStore("users");
                   var index = store.index("by_title");

                   var request = index.get("my");
                   request.onsuccess = function() {
                   var matching = request.result;
                   if (matching !== undefined) {

                   // A match was found.

Вот тут я вижу в консоли значение  matching.uid           
                     console.log ( 'DB - ' + matching.uid );

                                       
Присваиваю вроде как значение переменным

                     tokens =     matching.uid ;
                     token =     matching.uid ; 
                   
                   } else {
                   // No match was found.
                    console.log ( 'DB null' );
                   }
                   };
 
                });
  
 
  console.log("Token 1 " + token + " Token  2 " + tokens   );


Тут уже в консоли вижу пустоту изначальную

Token 1 undefined Token 2 undefined


Куда делось присвоение, как вытащить данные?

Последний раз редактировалось HelloIm, 15.05.2019 в 21:22.
Ответить с цитированием
  #2 (permalink)  
Старый 15.05.2019, 21:25
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 642

ну и вызывай какую-нибудь ф-цию "там", где они есть )...
Ответить с цитированием
  #3 (permalink)  
Старый 15.05.2019, 22:44
Новичок на форуме
Отправить личное сообщение для HelloIm Посмотреть профиль Найти все сообщения от HelloIm
 
Регистрация: 15.05.2019
Сообщений: 5

Это всё происходит внутри Service Workera
и данные видно в функции, но уже после обработки запроса..
Нужно как то заморозить остальное выполнения кода, до получения этих данных..
Ответить с цитированием
  #4 (permalink)  
Старый 15.05.2019, 23:24
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Так вам нужно дождаться конца, а затем только использовать...
function logerr(err) {
	console.log('Database error: ', err);
}

function connectDB() {
	return new Promise((resolve, reject) => {
		const request = indexedDB.open('library', 1);

		request.onerror = reject;
		request.onsuccess = () => resolve(request.result);

		request.onupgradeneeded = async e => {
			e.currentTarget.result.createObjectStore('users', {
				keyPath: 'uid'
			});
			resolve(await connectDB());
		};
	});
}

connectDB().then(db => new Promise((resolve, reject) => {
	var tx = db.transaction("users", "readonly");
	var store = tx.objectStore("users");
	var index = store.index("by_title");

	var request = index.get("my");
	request.onsuccess = () => {
		var matching = request.result;
		if (matching !== undefined) {
			// A match was found.
			// Вот тут я вижу в консоли значение matching.uid
			console.log('DB - ' + matching.uid);
			// Присваиваю вроде как значение переменным
			resolve(matching.uid);
		} else {
			// No match was found.
			console.log('DB null');
			reject();
		}
	};
})).catch(logerr).then(token => {
	console.log("Token 1 " + token + " Token  2 " + token);
});
Должно работать, если только я не сделал ошибки! Работает?
Ответить с цитированием
  #5 (permalink)  
Старый 15.05.2019, 23:36
Новичок на форуме
Отправить личное сообщение для HelloIm Посмотреть профиль Найти все сообщения от HelloIm
 
Регистрация: 15.05.2019
Сообщений: 5

Говорит:

connectDB(...) is undefined
TypeError: f is not a function
Ответить с цитированием
  #6 (permalink)  
Старый 16.05.2019, 00:00
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от HelloIm
connectDB(...) is undefined
Попробуйте ещё раз, скопируйте весь код выше. А то у вас что-то не то, у меня там же написано, что connectDB возвращает промис, оно не может возвратить undefined. Может у вас осталось старое connectDB?
Ответить с цитированием
  #7 (permalink)  
Старый 16.05.2019, 02:55
Новичок на форуме
Отправить личное сообщение для HelloIm Посмотреть профиль Найти все сообщения от HelloIm
 
Регистрация: 15.05.2019
Сообщений: 5

Как бы тут причина в другом... работать оно как бы работает, но проблема
в другом выходит...
Я при подписке юзера на пуш в IndexDB сохраняю его uid
потом хотел при отправке через это

messaging.setBackgroundMessageHandler(function(pay load) {

поменять урл на

data: payload.data.click_action + user_id,

В хроме на десктопе работает через раз...
В Фоксе не видит он user_id
На мобилке Хром тоже не понимает что он него хотят))

В итоге не получается изменить урл чтобы идентифицировать юзера который посмотрел этот пушш..


++

Думал с другим костылем пойти:

Регистрирую сервис воркер

navigator.serviceWorker.register('/firebase-messaging-sw.js?uid=blabla123);

Вижу в консоле воркер - firebase-messaging-sw.js?uid=blabla123

Не могу с него получить uid

let params = (new URL(self.location)).searchParams;
let uid = params.get('uid');

console.log( 'URL = ' + uid );
var user_id = "1513" + "&token=" + uid ;

Хром говорит: URL = null

Последний раз редактировалось HelloIm, 16.05.2019 в 03:01.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача переменных из eventListener`a другой функции Ch@r2411 Events/DOM/Window 3 20.07.2016 18:48
Запуск функции после загрузки дива qwe88 Общие вопросы Javascript 18 01.09.2015 10:40
Сложение переменных в другой функции inexwai jQuery 3 30.04.2013 11:33
Возврат значения функции после завершения анимации (затухания) grego jQuery 5 16.04.2013 22:25
Запуск функции после выполнения предыдущей blackrid jQuery 1 29.06.2011 14:23