我对JavaScript和承诺都很陌生,说实话我并不完全理解promises是如何工作的,所以我需要一些帮助.
我正在使用Google Cloud Messaging将通知从我的网站推送给我的用户.当用户收到通知并单击它时,它会打开存储在IndexedDB中的URL.
importScripts('IndexDBWrapper.js');
var KEY_VALUE_STORE_NAME = 'key-value-store', idb;
function getIdb() {
if (!idb) {
idb = new IndexDBWrapper(KEY_VALUE_STORE_NAME, 1, function (db) {
db.createObjectStore(KEY_VALUE_STORE_NAME);
});
}
return idb;
}
self.addEventListener('notificationclick', function (event) {
console.log('On notification click: ', event);
event.notification.close();
event.waitUntil(getIdb().get(KEY_VALUE_STORE_NAME, event.notification.tag).then(function (url) {
var redirectUrl = '/';
if (url) redirectUrl = url;
return clients.openWindow(redirectUrl);
}));
});
Run Code Online (Sandbox Code Playgroud)
所以在上面的代码中,我知道getIdb()... then()是一个promise,但event.waitUntil也是一个承诺?
上述代码的问题在于,每次点击通知时都会打开Chrome的一个实例,我希望它会利用现有的实例(如果可用).以下是这样的:
self.addEventListener('notificationclick', function(event) {
console.log('On notification click: ', event.notification.tag);
event.notification.close();
event.waitUntil(
clients.matchAll({
type: "window"
})
.then(function(clientList) {
for (var i = …
Run Code Online (Sandbox Code Playgroud)