2017-02-20 11 views
6

はどこかでこの例読み:プロミス。リターン解決()と決意betwen違いは何ですか()

return new Promise((resolve, reject) => { 
    fs.readFile(file, (err, data) => { 
    if (err) reject(err) 
    return resolve(data) 
    }) 
}) 

を、私は通常、この操作を行います。

return new Promise((resolve, reject) => { 
    fs.readFile(file, (err, data) => { 
    if (err) reject(err) 
    resolve(data) 
    }) 
}) 

は違いはありますか?

+2

ここでは違いはありません。 – elclanrs

+0

私は最初のケースではチェーン化できますが、2番目のケースではできません –

答えて

11

return resolve()は、コードの流れに依存する通常のreturnとして関数の実行を終了します。実行する関数にコードを追加したくない場合は、returnを使用して終了します。機能

return new Promise((resolve, reject) => { 
    fs.readFile(file, (err, data) => { 
    if (err) reject(err) 
    return resolve(data) 
    console.log('after return') // won't execute 
    }) 
}) 

は唯一resolveは約束の成功状態を作成しますが、returnが使用されていないとき、もしあれば、コードの実行を実行します。 returnを使用すると、完全にあなたのコードフローに依存 、

resolve()を覚えてreject()状態が作成されると約束の状態を作成し、彼らが.then.catchハンドラをさらに実行するために使用され、変更することはできません。あなたがそのブロック内のより多くのコードを実行したくない場合は、return resolve()

return new Promise((resolve, reject) => { 
    fs.readFile(file, (err, data) => { 
    if (err) reject(err) 
    resolve(data) 
    console.log('after return') // will execute 
    }) 
}) 

それはfunctionの通常return文と全く同じだとそうでない約束

+0

'.then'ステートが作成されたときにそれらがどのように反応するかを示すことは役に立ちます。 。 – brandonscript

関連する問題