Come gestire le chiamate asincrone in un'applicazione offline

3

Sto usando l'API javascript di un'applicazione offline e vorrei sapere se posso utilizzare gli oggetti posticipati per gestire i callback. Le chiamate API non utilizzano HTTP, le chiamate da e verso il database locale delle applicazioni.

L'unico modo in cui sono stato in grado di visualizzare le informazioni è usando "setTimeout" nelle chiamate successive, che so, è terribile! Quindi ho una lunga lista di callback e timeout.

var jsObj = {};
var anotherObj = {};

//first async call
methodName("arg1", jsObj, callback);

function callback(result){

  jsObj["data"] = result;

}

//second async call
setTimeout(function(){methodName("arg1", anotherObj, callback2);}, 200);

function callback2(result){

  jsObj["data"] = result;

}

//wait
setTimeout(function(){

  $("#content").html(JSON.stringify(jsObj));

},300);

C'è comunque un refactoring? Qualsiasi consiglio è apprezzato. Ho esaminato il seguente post , ma non lo sono sicuro che avrebbe funzionato. Sono consapevole di poter creare oggetti differiti personalizzati (jQuery), ma modificare l'API per utilizzare questo o qualsiasi altro metodo di promessa di oggetti sembra non realistico.

    
posta Mike 21.05.2014 - 16:39
fonte

1 risposta

0

Gli oggetti differiti sono davvero la strada da percorrere qui. Non è necessario modificare l'API, basta utilizzare una libreria di promessa come Q che può essere inclusa. Sarebbe simile a questo:

promiseMethodName = Q.denodeify(methodName);

promiseMethodName("arg1", jsObj).then(function(result) {
  jsObj["data"] = result;
  return result;
}).then(function(result) {
  return promiseMethodName("arg1", anotherObj);
}).then(function(result) {
  jsObj["data"] = result;
  return result;
}).then(function(result) {
  $("#content").html(JSON.stringify(jsObj));
});

Se la tua API non utilizza callback in stile nodo, potresti dover implementare la tua versione di denodeify , che può essere complicata, ma il resto sarà lo stesso.

    
risposta data 21.05.2014 - 20:20
fonte

Leggi altre domande sui tag