2014-11-10 29 views
13

Diğer sözler bu yanıt verdiyse çok üzüldüm ama bazılarına bakarken sorunumu çözmek için yanıt alamıyorum. Kapmak, elemek ve elle birleştirmek istediğim üç json dosyası var. Sorun, söz hapiste sıkışıp kalıyorum. Angularjs kontrol cihazımdan bazı kodları göstereyim. console.dir itibarenBir söz vermek yerine bir söz veriyorum

$scope.tests = []; 

$scope.tests = $http.get('results/testResults.json').then(function(res) { 
    return res; 
}); 

console.dir($scope.tests); 

bir söz alma ama ne Beklediğim değişken res gelen verileri ediyorum. Bu verileri elde etmenin bir yolu olmalı. Bu veriyi global bir değişkene vermenin bir yolu yok mu, diğer işlevler sözleri bu verileri kullanabilir? Teşekkürler

+1

Geri aramada veri alamıyorsanız, geri aramadaki verileri kullanın – dandavis

+0

.then() Son söz ve konsol günlüğüne giriş yapın –

+0

Bu, sözleri kullanmanın tam olarak yanlış yolu. Vaatler eşzamansızdır ve eşzamanlı olarak kullanmaya çalışıyorsunuz. – greggreg

cevap

16

Söz, gelecekte biraz zaman tamamlar. Veriler vaatte bulunmadan önce vaat değişkenini inceliyorsunuz. Verilerinizi kullanmak için söz zincirinde kalmalısınız. Söz zincirinin dışında, asenkron olayların zamanlamasını bilmezsiniz (bu nedenle ilk önce sözler kullanırsınız).

Eğer gerçekten o zaman, kullanmak için ideal bir yerdir ki ilk .then() işleyicisi veri hakkını kullanmak istemiyorsanız yapabilirsiniz zincir Sözüne üzerine başka .then(): Bilginize

$scope.tests = $http.get('results/testResults.json'); 

$scope.tests.then(function(data) { 
    // can use data here 
}); 

, vaat verileri global değişkenlere doldurmayın. Bu geri çağrılar çağrıldığında, .then() geri aramalarında kullanılabilir verileri kullanıma sunarlar.

+0

Ayrıca kimlik eşlemesini de ortadan kaldırmak isteyeceksiniz. – Bergi

+1

Bu yüzden büyük bir nesne oluşturamıyorum ve üç json dosyası ile veri toplayıp birleştiremiyorum? Benim için – jrock2004

+1

@ jrock2004 sıkışmış gibi görünüyor - asenkron işlemleri kullanırken biraz farklı düşünmek ve kod yazmak zorunda. Birden çok eşzamansız işlemi koordine etmek için 'Promise.all()' gibi diğer vaat özelliklerini kullanabilirsiniz, böylece tüm async sonuçları tamamlandığında bazı kodları çalıştırabilirsiniz ve tüm sonuçları kullanabilirsiniz. – jfriend00

-2

, bu gibi vaat içinden, kendisine veri aktarmak,

window.myProperty

Sonra

bir bir özelliği Makyaj ve bunun gibi, pencere nesnesi üzerinde sopa

window.myProperty = veri;

Ve böyle, dışarıda geri olduğunda, onu almak,

myVariable = window.myProperty;

Veya tersi, ben böyle gider bu yüzden,

Yine, bazı Promises veya uzaklaştırmak veri almak bir mülk makyaj ve bunun gibi, pencere nesnesi üzerinde sopa gibi olamaz çünkü,

window.myProperty

Sonra, bu gibi vaat dışından, buna

window.myProperty = verileri veri aktarmak;

Ve böyle, içeride olduğunda, onu almak,

myVariable = window.myProperty;

Bunu yapmanın en iyi yolu bu olamaz! Daha iyi bir yolu bilen var mı?

İlgili konular