2016-08-23 8 views
0

私は約束を返す別の関数を呼び出す必要がある約束を返す一つの機能があります。getUserメソッドは「Promise.resolveを返す」ので、私はこれが動作しないと思います角度2の別のPromise関数から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オブジェクトをインスタンス化して、必要な場所でそのオブジェクトを解決するだけでした。 Angular 2/Typescript/EM6に相当するものがわかりません。

ご協力いただければ幸いです。

+1

ARENをあなたはそれが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'メソッドは'約束 'を返すので、'それで 'もできます。あなたが1つの約束で返すものは、次のものが受け取るものなので、実際にチェーンの結果を変更することができます。 –

関連する問題