2016-06-19 1 views
0

私は約束オブジェクトを返す関数を持っています。これは私が機能fooが約束オブジェクトを返しますし、私は、文字列「こんにちは」を得るだろうと思った私のコードJavaScriptでPromiseを使用するときに奇妙なものがあります

var foo = function(){ 
    // doSomething() is a promise object 
    return doSomething().then(() => { 
     Promise.resolve('Hello'); 
    }); 
}; 

foo().then((res) => { 
    console.log(res); 
    // res = undefined but not "Hello" 
}); 

です。しかし、私は未定義になる。どうして?

+3

「Promise.resolve」の前に 'return'がありません。しかし実際には、これはまったく必要なく、 'Hello'という文字列を返すことができます。 '{} 'を省略して' .then(()=>' Hello ') 'と言うだけで、簡略化したarrow関数の本体形式を使うことでさらに簡単にすることができます。 –

+0

ありがとう、それは動作し、よく見えます。 –

+0

'doSomething'メソッドを表示してもらえますか? – timothyclifford

答えて

4

それは

var foo = function(){ 
    return doSomething().then(() => { 
     return Promise.resolve('Hello'); 
     ^^^^^^ 
    }); 
}; 

しかし、実際にあなたがすべてでそれを必要としない、とちょうどこんにちは、文字列を返すことができなければなりませんので、あなたは、Promise.resolve前にリターンを逃しています。

var foo = function(){ 
    return doSomething().then(() => { 
     return 'Hello'; 
    }); 
}; 

あなたは{}をオフのまま、矢印機能の簡潔なボディフォームを使用することによって、それがさらに簡単に作ることができます。

var foo = function(){ 
    return doSomething().then(() => 'Hello'); 
}; 
関連する問題