2017-02-23 13 views
1

У меня есть две функции, которые я хотел бы выполнять один за другим. Один устанавливает один объект, а следующий устанавливает другой объект, основанный на свойстве первого объекта. По какой-то причине, первый объект устанавливает штраф, и я могу видеть второй объект должным образом в консоли, но когда я пытаюсь установить его на второй объект, он возвращается к первому.Вызов двух обещаний и установка двух объектов, но второй устанавливается на первый

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

Смежные вопросы