bonjour,
je me fais une extension avec un background script, et une popup.
l'extension utilise "localbase.js" qui permet une gestion des indexedDB plus simple
la popup veut recuperer un recapitulatif des clients pour cela, elle fait browser.runtime.sendMessage({action: 'getClientsRecap'}, ({data}) => { console.log(data); });.
le background quant a lui fait : function getClientsRecap(request, sender, sendResponse) { sendResponse({data: 'ok'}); })=> ceci fonctionne
cependant, lorsque j'inclu la requete dans l'indexedDB, j'ai le fameux message "The message port closed before a response was received."
j'ai tout essaye :
Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 db.collection('clients').get().then(clients => { const recapClients = []; clients.forEach(client => { recapClients.push({ id: client.id, name: `${client.personLastName} ${client.personFirstName}` }); }); sendResponse({data: recapClients}); });
une simple promesse : ca fonctionne
l'acces en DB dans une promesse, ca fonctionne pas
Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 return new Promise(resolve => { resolve(); }).then(() => { sendResponse({data: 'ok'}); });
j'avoue etre un peu perplexe... je ne comprends pas ce qui se passe
Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 return new Promise(resolve => { db.collection('clients').get().then(clients => { const recapClients = []; clients.forEach(client => { recapClients.push({ id: client.id, name: `${client.personLastName} ${client.personFirstName}` }); }); resolve(recapClients); }); }).then(recapClients => { sendResponse({data: recapClients}); });
ps : la lib en question est celle-ci : https://github.com/dannyconnell/localbase
pss: quand je fais des console.log du retour DB (dans le background), j'ai bien ma data
Partager