Molto semplicemente, una richiamata non deve essere asincrona.
http://docs.apigee.com/api-baas/asynchronous-vs-synchronous-calls
sincrono:
Se una chiamata API è sincrona, significa che l'esecuzione codice blocco (o attendere) per la chiamata API per restituire prima di continuare. Questo significa che finché l'API non restituisce una risposta, l'applicazione non verrà eseguita ulteriormente, che potrebbe essere percepita dall'utente come latenza o ritardo di prestazioni nella tua app. Effettuare una chiamata API in modo sincrono può essere utile, tuttavia, se ci fosse il codice nella tua app che verrà eseguita correttamente una volta ricevuta la risposta API.
asincrono:
chiamate asincrone non bloccare (o attendere) per la chiamata API per restituire dal server. L'esecuzione continua nel programma e quando la chiamata viene restituita dal server, viene eseguita una funzione di "richiamata".
In Java, C e C#, "callback" sono di solito sincrono (rispetto ad un "loop evento principale").
In Javascript, d'altra parte, i callback sono in genere asincroni - si passa una funzione che verrà invocata ... ma altri eventi continueranno a essere elaborati fino a quando non viene richiamata la richiamata.
Se non ti interessa quali eventi Javascript si verificano in quale ordine - grande. In caso contrario, un meccanismo molto potente per la gestione comportamento asincrono in Javascript è quello di utilizzare "promesse":
http://www.html5rocks.com/en/tutorials/es6/promises/
PS: per rispondere alle vostre domande:
Sì, un callback può essere un lambda - ma non è un requisito.
In Javascript, quasi ogni callback sarà una "funzione anonima" (in pratica una "espressione lambda").
Sì, i callback possono essere richiamati da un thread diverso, ma non è certamente un requisito.
I callback possono anche (e spesso lo fanno) generare un thread (rendendosi così "asincroni").
'Speranza che aiuta
=================================== =================================
Ciao, Anche in questo caso:
D: @ paulsm4 puoi per favore elaborare un esempio di come la callback e la chiamata asincrona funzionano nel flusso di esecuzione? Che sarà molto utile
Per prima cosa dobbiamo concordare una definizione di "callback". Ecco una buona:
https://en.wikipedia.org/wiki/Callback_%28computer_programming%29
Nella programmazione di computer, un callback è un pezzo di codice eseguibile che viene passato come argomento per altro codice, che dovrebbe richiamare (eseguire) l'argomento in un momento opportuno. L'invocazione può essere immediata come in una callback sincrona oppure in un momento successivo come in un callback asincrono .
Dobbiamo anche definire "sincrono" e "asincrono". Fondamentalmente - se un callback fa tutto il lavoro prima di tornare al chiamante, è "sincrono". Se può tornare al chiamante immediatamente dopo che è stato chiamato - e il chiamante e il callback possono funzionare in parallelo - allora è "asincrono".
Il problema con i callback sincroni è che possono apparire "bloccati". Il problema con i callback asincroni è che puoi perdere il controllo di "ordering" - non puoi necessariamente garantire che "A" si verifichi prima di "B".
Esempi comuni di callback includono:
a) un gestore di premere il tasto (ogni "pulsante" diversa avrà una "risposta" diversa). Questi sono solitamente invocati come "asincroni" (dal ciclo degli eventi principale della GUI).
b) una sorta di funzione "confronta" (quindi una funzione comune "sort()" può gestire diversi tipi di dati). Questi sono di solito invocati "in modo sincrono" (chiamati direttamente dal tuo programma).
Un esempio concreto:
a) Ho un programma in linguaggio "C" con una funzione di "print()".
b) "print()" è progettato per utilizzare uno dei tre callback: "PrintHP()", "PrintCanon()" e "PrintPDF()".
c) "PrintPDF()" chiama una libreria per il rendering dei miei dati in PDF. È sincrono - il programma non ritorna da "print()" finché il rendering .pdf non è completo. Di solito va piuttosto veloce, quindi non c'è nessun problema.
d) Ho codificato "PrintHP()" e "PrintCanon()" per generare i thread per eseguire l'I/O sulla stampante fisica. "Print()" esce non appena viene creato il thread; l'effettiva "stampa" procede parallelamente all'esecuzione del programma. Questi due callback sono "asincroni".
D: Ha senso? Questo aiuta?
in realtà una domanda molto buona. Non preoccuparti del fatto che il cervello dello stronzo ti annulli;) – paulsm4