2016-03-22 7 views
0

Promise artık resmi olarak belirtilmiştir ve bunun yerine, $q(function (resolve, reject) {}) yapıcı sözdizimini kullanmak için aşağıdaki snippet'te $q.defer() söz oluşturma yordamını nasıl dönüştürürüm?

// Cancel any ongoing $http request so that only the most recent $http 
// callback gets invoked 
var canceller; 
function getThing(id) { 
    if (canceller) canceller.resolve(); 
    canceller = $q.defer(); 

    return $http.get('/api/things/' + id, { 
    timeout: canceller.promise 
    }); 
} 

($http docs den Bilginize: timeout "milisaniye cinsinden ... ya çözüldüğünde isteği iptal etmelidir söz" tir.)

+0

Hedefinizin ne olduğunu anlamıyorum. Kodun iyi ve çalışıyor, hiçbir şeyi değiştirecek bir sebep yok. – Bergi

+0

"* Söz kurucu sözdizimini nasıl kullanırım? *" - [** Yapmazsınız! **] (http://stackoverflow.com/q/23803743/1048572) – Bergi

+0

hedef yok. Sadece bir akademik egzersiz – thatmarvin

cevap

1

böyle yapardım:

var canceller = null; 
function getThing(id) { 
    if (canceller) canceller(); 
    return Promise.resolve($http.get('/api/things/' + id, { 
    timeout: new Promise(function(resolve) { 
     canceller = resolve; 
    }) 
    })); 
} 

Her zaman canceller.reject'u kullanamayacağınızı varsayacağım, böylece bir dahaki sefere aramak için resolve işlevini kendiniz de saklayabilirsiniz.

+0

$ http.get() bir söz verir, bu yüzden Promise.resolve() wrap gerekmiyor mu? – thatmarvin

+0

@thatmarvin: Bu parlak yeni resmi olarak verilen Promise's, ama eski bir sıkıcı AngularJs-söz :-) dönmek değil Angular vaatler (ve yerine yeni söz "yerine $ q' kullanmak istiyorsanız) o zaman elbette atlayabilirsiniz. – Bergi

+0

kabul edildi. şimdi görüyorum çok açık, teşekkürler! – thatmarvin