Qual è il miglior modello di progettazione per il trasferimento asincrono di messaggi in un'estensione di Chrome?

1

Ho uno script in background che è responsabile per ottenere e impostare i dati su un database localStorage . I miei script di contenuto devono comunicare con lo script in background per inviare e ricevere dati.

In questo momento invio un oggetto JSON che contiene il comando e i dati a una funzione. Quindi, se sto cercando di aggiungere un oggetto al database, creerò JSON che ha un attributo command che è addObject e un altro oggetto che è i dati. Una volta completato, gli script in background inviano una risposta affermando che è andata a buon fine.

Un altro caso d'uso della funzione sarebbe chiedere i dati, nel qual caso invierebbe un oggetto indietro piuttosto che un successo / fallimento.

Il codice diventa una specie di hacky quando cerco di recuperare l'oggetto restituito dallo script di sfondo.

Sembra che ci sia probabilmente un semplice problema di design da seguire qui che non conosco. Alcune persone hanno suggerito problemi di progettazione futuri o promettenti, ma non ho trovato un ottimo esempio.

Script contenuto

function sendCommand(cmdJson){
chrome.extension.sendRequest(cmdJson, function(response){
    //figure out what to do with response
});
}

Script in background

if (request.command == "addObject"){
  db[request.id]= JSON.stringify(request.data); 
    sendResponse("success");
}
else if(request.command == "getKeystroke"){
  var keystroke = db[request.id];
  sendResponse(keystroke);
}
    
posta ZeroDivide 13.02.2012 - 05:11
fonte

1 risposta

0

Bene, non sono sicuro di quale schema lo chiamerai. Direi che dopo sembra un modello di comando, lo farei ..

var commands = {
         "addObject":function(request){/*Do something, send response etc*/},
         "getKeystroke":function(request){/*Do something, send response etc*/},
}

E nel gestore della richiesta

var requestHandler = function(request) {
      commands[request.command](request);
}
    
risposta data 23.02.2012 - 10:37
fonte

Leggi altre domande sui tag