2017-02-23 44 views
1

我有兩個函數,我希望一個接一個執行。一個設置一個對象,另一個設置基於第一個對象屬性的另一個對象。出於某種原因,第一個對象設置正常,我可以在控制檯中正確地看到第二個對象,但是當我嘗試將其設置爲第二個對象時,它將返回第一個對象。調用兩個promise並設置兩個對象,但第二個設置爲第一個

setObject1(){ 
var self = this; 
this.Service.getObject1().then(function(data){ 
    if(data){ 
    self.Object1 = data.Data; 
    self.setObject2(); 
    } 
}); 
} 

setObject2(){ 
var self2 = this; 
this.Service2.getObject2(this.Object1.HRRef).then(function(sdata){ 
    if(sdata){ 
    self2.Object2 = sdata[0]; 
    } 
}); 
} 

我可以在控制檯中看到這兩個對象精細,但當我嘗試並設置self2.Object2 = SDATA [0],它不被置。

+0

你怎麼知道它沒有得到設置?告訴我們如何(何時)嘗試訪問它。 – Bergi

+0

當我將鼠標懸停在控制檯的sdata [0]上時,它向我顯示它是data.Data – Monzingo

+0

我以爲你在爭論'self.Object2'嗎?在任何情況下,您似乎都對已記錄對象的[異步檢查](http://stackoverflow.com/q/23392111/1048572)感到困惑,如果稍後您要對對象進行變更,這是非顯而易見的。 – Bergi

回答

0

我猜想它的一個this問題!

請勿使用function語法!

使用箭頭語法:(data) => {}

你的情況:

setObject1() { 
    this.Service.getObject1().then(data => { 
     console.log(data); 
     if(data){ 
     this.Object1 = data.Data; 
     this.setObject2(); 
     } 
    }); 
} 

setObject2() { 
    this.Service2.getObject2(this.Object1.HRRef).then(sdata => { 
     console.log(sdata); 
     if(sdata) { 
     this.Object2 = sdata[0]; 
     } 
    }); 
} 
+0

他不使用'this',他使用'self'變量來避免這個問題。 – Bergi

相關問題