Mi chiedo se esista un modo per sincronizzare a metà le funzioni di javascript, dove i dati sono richiesti al volo. Non voglio renderlo puramente bloccante (cosa che immagino sia impossibile), voglio solo un bel modo per scrivere l'intero algoritmo in un unico pezzo.
Facciamo il seguente esempio:
function(){
command1;
var x1 = something;
async_function(x1, callback1);
}
function callback1(data){
var x2 = command2(data);
async_function2(x2, callback2);
}
function callback2(data1){
command3(data1);
}
Vorrei scrivere qualcosa come:
function(){
command1;
var x1 = something;
call(async_function, [x1], callback1);
var x2 = command2(data);
call(async_function2, [x2], callback2);
command3(data1);
}
- Ho provato a giocare con la proprietà
caller
delle funzioni, ma non ho familiarità con l'ambiente di esecuzione. - Ho anche provato a scrivere una funzione "call" come sopra, usando la funzione
apply
per passare una chiamata personalizzata che restituisce il risultato della funzione asincrona al suo chiamante.
Ciò che mi infastidisce è che durante la programmazione di \ debugging, devo seguire il codice da una funzione a un'altra in un'altra (proprio come l'inizio del film). Voglio un posto in cui scrivere l'algoritmo di alto livello senza decomporlo in molte funzioni.
Ad esempio, se voglio scrivere un algoritmo A *, ma la funzione "getNeighbours" è asincrona.