2016-08-23 4 views
0

나는 약속을 반환하는 다른 함수를 호출 할 필요가있는 약속 반환 한 기능을 가지고 : 나는 인 getUser는 "Promise.resolve를 돌려"이후이 작동하지 않습니다 생각각도 2의 다른 약속 함수에서 Promise 함수를 호출하는 방법은 무엇입니까?

getUser(): Promise<User> { 
    this.getAPIUser().then(result => { 
     ..Do some stuff with result.. 
     return Promise.resolve(result); // This doesn't work 
    }); 
} 

getAPIUser(): Promise<User> { 
    return Promise.resolve({ firstName: 'Jason' }); 
} 

가의 맥락에서 getAPIUser 그리고 핸들러. 이것은 Angular 1에서 정말 쉽습니다. $ q 객체를 인스턴스화 한 다음 필요에 따라 그 객체를 해결하면됩니다. 나는 등가물 2/Typescript/EM6에서 무엇이 있는지를 알 수 없다.

도움을 주시면 감사하겠습니다.

+1

때로 믿을 수를 당신이이 Promise 다시 반환하고 당신의 방법을 반환 할 필요가 무엇 약속에 then 메소드를 호출
getUser()에서 반환 값을 놓치셨습니까? – Joe

답변

5

getUser 메서드는 약속을 전혀 반환하지 않습니다.

getUser(): Promise<User> { 
    return this.getAPIUser().then(result => { 
     ..Do some stuff with result.. 
     return result; 
    }); 
} 
+0

한숨, 예, 게시 한 직후에 알아 냈지만 너희들은 나보다 빨랐어! StackOverflow는 절대 놀라지 않습니다. 내가 6 분 안에 대답 해줄거야. 감사! – Jason

1

완성도를 위해서이뿐만 아니라 작동합니다 :

getUser(): Promise<User> { 
    return new Promise((resolve) => { 
     this.getAPIUser().then(user => { 
      resolve(user); 
     }) 
    }); 
} 
+1

이 솔루션은'getUser' 함수가 asynced 자체가 아니기 때문에 추가 'Promise'를 만듭니다. 비동기 getAPIUser'를 호출하기 때문에 비동기입니다. –

+0

아, 좋은 지적입니다. getUser가 다른 정보를 반환해야하는 경우 getAPIUser의 약속에 대한 반환을 변경할 수 있습니까? – Jason

+2

약속 api에 관하여 좋은 것은 그들이 사슬로 매여 질 수있다이다. 그러므로'then' 메서드는'약속 '을 반환합니다. 한 약속으로 돌아 오는 것은 다음 약속이받는 것입니다. 따라서 체인의 결과가 실제로 바뀔 수 있습니다. –

관련 문제