JavaScript Callbacks prima o dopo l'uscita dalla funzione?

0

C'è una ragione concreta per preferire l'esecuzione di callback alle funzioni prima o dopo l'uscita dalla funzione chiamata? Esempio

function doSomethingPossiblyAsync(callback) {
  if (errorDetectedImmediately) {

     // call callback immediately before doSomethingPossilbyAsync has returned
     callback(someError);
  }
  ...
}

vs

function doSomethingPossiblyAsync(callback) {
  if (errorDetectedImmediately) {

     // call callback after doSomethingPossiblyAsync has returned
     process.nextTick(function() {
       callback(someError);
     }
  }
  ...
}

Preferisco il secondo perché lo rende coerente con la asincurità del percorso non-error, ma non ho idea se sono razionale o se non ha importanza.

Si noti che per EventEmttiers è importante dal momento che non è possibile aggiungere gli ascoltatori prima di aver creato l'oggetto, il che significa che non si devono emettere eventi fino a dopo la creazione, anche se rilevati durante la creazione, ma qualche ragione logica analoga si applica ai callback?

    
posta gman 02.05.2016 - 08:56
fonte

2 risposte

1

Ci sono, come sempre, dei compromessi. La prima opzione è più semplice, più efficiente e richiede meno memoria. Il secondo fornisce un ambiente più coerente per i callback in cui operare.

Data la possibilità che autori di callback creino bug difficili da identificare con la prima opzione assumendo che il loro callback venga chiamato in modo asincrono, suggerirei di utilizzare la seconda variante tranne nel codice critico delle prestazioni.

    
risposta data 02.05.2016 - 09:29
fonte
-4

Se dai un'occhiata a come sono fatte le cose in jQuery, AngularJS, ES6, vedrai che ciò che scelgono non è ciò che hai fatto.

Invece usano 2 callback separati, uno per il successo, uno per l'errore.

Tuttavia non vedo alcun problema a non aspettare se viene rilevato automaticamente un errore.

    
risposta data 02.05.2016 - 09:12
fonte

Leggi altre domande sui tag