2017-10-13 16 views
0

私は約束を返す関数に対してapplyメソッドを呼び出していますが、applyメソッドが呼び出された後に応答データを取得することに問題があります。約束事にapply()を使用して約束応答データにアクセスできない

getData(data) { 
    axios.post('/post/something', data) 
     .then(res => console.log(res)); // Returns 'Success' 
} 

callService(args, fn) { 
    return fn.apply(this, args) 
      .then(() => this.doSomethingElse()) 
      .then(res => console.log(res)); // Returns undefined 
} 


callService([1,2], getData); 

なぜfn.apply約束ではなく、戻ってサーバから送信されたデータが含まれていますか?これを行う正しい方法は何ですか?

+0

'res'は' this.doSomethingElse() 'を返すその値になります:

callService(args, fn) { return fn.apply(this, args) .then(res => { this.doSomethingElse(); return res; }); } 

またはdoSomethingElse場合が約束を返します。 –

+0

また、約束を適用することはできません。あなたは約束を返す関数を呼び出すためにapplyを使用しています。 –

+0

さて、何が起こっているのか分からず、私が達成しようとしていることを説明しようとするのに少し苦労しました。ありがとう。 – hdifen

答えて

1

なぜfn.applyには約束が含まれていますが、サーバーから返されたデータは含まれていませんか?

callService明らかundefinedあるthis.doSomethingElse()の戻り値に解決する約束を返します。これは、.thenを呼び出すときに起こります。 .thenによって返される約束は、渡された関数の戻り値に解決されます。 You can learn more about promises on MDN

これを行う正しい方法は何ですか。

私はあなたがこの希望を推測:

callService(args, fn) { 
    return fn.apply(this, args) 
      .then(res => this.doSomethingElse().then(() => res)); 
} 
+0

素晴らしい、フェリックスに感謝します。私は彼らが前のものの反応を取り入れたときには気付かなかった。私のために基本的な誤解だった。私はこの答えを受け入れるでしょう。 – hdifen

+0

慰めがあれば、私は最初に約束を学んだときに同じミスを犯しました:) –

関連する問題