2014-10-03 19 views
6

Angular'de $ q kullanırken iç içe geçmiş sözlerin eşleştirilmesiyle ilgili bir sorunuz var. Aşağıdaki kod, tüm vaat zincirinin beklemesini sağlıyor mu? Anlamı, $ q.all bloğunda bekleyen vaatleri bekleyen hizmetlere yapılan çağrılar mı olacak?

var call1 = service1.get('/someUr').then(function(){ 
    return service2.get('/someUrl2'); //returns promise 
}); 

var call2 = service3.get('/someUr').then(function(){ 
    return 'hello'; 
}); 

var call3 = service4.get('/someUr').then(function(){ 
    return service3.get('/someUrl3');//returns promise 
}); 

$q.all(call1,call2,call3).then(function(){ 
    console.log('All asynch operations are now completed'); 
}); 

Temelde: o zaman tüm iç içe vaatler önce çalıştırır $ q.all arasında çözümlenir akım koduyla bir şans var mı? Yoksa özyinelemeli mi?

+1

Hayır, sanmıyorum. '$ Q.all()' 'call1',' call2' ve 'call3'' 'sonra' '()' işlevini tetiklemeden önce birlikte çözmek için bekleyecektir, ancak iç içe çağrılan çağrıları 'call1' ve' call3' döndürdü Beklenmeyecek. – Brett

+0

Bekleyeceği izlenimi altındaydım. –

+1

Şu anda bunu test etmek için kullanışlı bir açısal elimde yok, ama yerel vaatlerle, kesinlikle beklemekte. http://jsfiddle.net/p4evLjm6/ –

cevap

4

Evet, Kevin doğru gibi görünüyor. Davranışı doğrulamak için açısal olarak hızlı bir test oluşturdum.

angular.module('myModule').controller('testController', function ($q,$scope) { 

    function promiseCall(data,timeout) { 
    var deferred = $q.defer(); 

    setTimeout(function() { 
     deferred.resolve(data); 
     console.log(data); 
    }, timeout); 

    return deferred.promise; 
    } 

    var a = promiseCall('call1 a',1000).then(function(){ 
    return promiseCall('call2 a',50); 
    }); 

    var b = promiseCall('call1 b',500); 

    var c = promiseCall('call1 c',1000).then(function(){ 
    return promiseCall('call2 c',50).then(function(){ 
     return promiseCall('call3 c',6000); 
    }); 
    }); 

    $q.all([a,b,c]).then(function(res){ 
    console.log('all calls are done'); 
    }); 

}); 
İlgili konular