. - ( "watterfall" ), async, , .
, , .
f1(arg1, function(){
arg2 = g(arg1);
f2(function(){
...use arg2
});
});
var arg2;
f1(arg1, afterf1);
function afterf1(){
arg2 = g(arg1);
f2(afterf2);
}
function afterf2(){
...use arg2;
}
, , , , ( - , , , ).
, , .
var x = f();
, x, .
f(function(x){
...use x here
});
, - x.
"" , , , .
var got_result = false;
var result = null;
var waiting_for_result = [];
function register_callback(f){
if(got_result){
f(result);
}else{
waiting_for_result.push(f);
}
}
var real_callback = function(x){
got_result = true;
result = x;
for(var i=0; i< waiting_for_result.length; i++){
waiting_for_result[i](result);
}
}
API.getCurrentLocation(real_callback);
foreach facility {
register_callback(function(location){
...stuff
})
, PITA, Promise, . , - " " .
, Dojo
var location_promise = API.GetLocationPromise();
foreach facility {
location_promise.then(function(location){
...use location
});
}