2016-12-24 8 views
2

私はこのようなTypescriptメソッドを持っています。私はPromiseを返しますが、this.user.currentCourseId = student.currentCourseId;行が実行された後でなければなりません。このメソッドでPromiseを返す方法

可能ですか?

public getUserData() 
{ 
    ... 

    this.authState.auth.getToken().then(token => 
    { 
     this.user.token = token; 

     this.userService.update(this.user).then(student => 
     { 
      this.user.currentCourseId = student.currentCourseId; 
     }); 
    }); 
} 

答えて

1

:彼らは、元の約束に連鎖されているように、最初の.then()ハンドラ内の他の約束は、その内部に返されます終了しました。それは馬の前にカートを置くでしょう。あなたはすぐに約束を返し、それを解消して完成を待つ。

私はちょうどあなたが「運命の塔」に向かってスライドの習慣を避けるために連鎖する約束を活用する必要があることを指摘したい:

public getUserData() 
{ 
    ... 

    // return promise from function 
    return this.authState.auth.getToken().then(token => 
    { 
     this.user.token = token; 

     // return promise here to chain to original promise 
     return this.userService.update(this.user) 
    }).then(student => { 
     this.user.currentCourseId = student.currentCourseId; 
    });; 
} 

getUserDate().then(() => { 
    // currentCourseId has been set now 
}); 
1

すぐに約束を返します。 jfriendが指摘するように、あなたはそれを持っていた後までの約束を返すために待つことができない

public getUserData() 
{ 
    ... 

    // return promise from function 
    return this.authState.auth.getToken().then(token => 
    { 
     this.user.token = token; 

     // return promise here to chain to original promise 
     return this.userService.update(this.user).then(student => 
     { 
      this.user.currentCourseId = student.currentCourseId; 
     }); 
    }); 
} 

// usage 
getUserDate().then(() => { 
    // values are set here 
}); 
関連する問題