2017-02-13 4 views
0

私はドロップウィザードREST APIと対話する反応アプリケーションを持っています。私のコードでは、私は次の奇妙なバグに気付きました。node.jsのグリッチは値のコピーを約束します

2変数の値を設定して、状態を設定するためにそれらを使用しようとするには、私はLoginTransportは、外部APIを呼び出すメソッドで、次の

const [inventorRes, sellerRes] = 
await Promise.all([ 
    LoginTransport.getAllUsers('Inventory Owner'), 
    LoginTransport.getAllUsers('Seller'), 
]); 

を持っていました。これで、発明者のresとsellerResの両方が、それぞれの引数ではなく、LoginTransport.getAllUsers( 'Inventory Owner')の値に設定されることに気付きました。

私はにそれを破る時:

const inventorRes = await LoginTransport.getAllUsers('Inventory Owner'); 
const sellerRes = await LoginTransport.getAllUsers('Seller'); 

行動は正しいです。

私の理解から:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/allは、Promise.allがイテレートを返すということでした。 javascriptが左側の反復可能な値と右側の値を一致させようとしているのではないでしょうか?それが正しいと仮定しても、私はPromise.all()を使用することを強く主張しましたが、私は何をしたいのですか?

+1

あなたのコードのダウン易しく書き直さバージョンはうまく動作しますそれは –

+3

あなたが記述している動作は起こってはいけません。 'LoginTransport.getAllUsers'が、それが素早く連続して呼び出された場合に同じ値を返すような副作用を持っているかどうかをチェックするべきです。これを次のようにチェックすることができます: 'const p1 = LoginTransport.getAllUsers( 'Inventory Owner'); const p2 = LoginTransport.getAllUsers( 'Seller'); const inventorRes = p1を待つ。 const sellerRes =待つp2; ' – JLRishe

答えて

1

これで、発明者のresとsellerResの両方が、それぞれの引数ではなく、LoginTransport.getAllUsers('Inventory Owner')の値に設定されることに気付きました。

これは、LoginTransport.getAllUsersのエラーです。 Promise.all doesあなたが期待していること。おそらく、あなたの `LoginTransport.getAllUsers`機能が休憩「同時に」概念的に二回、それを実行しているいくつかの方法で、壊れている - https://jsfiddle.net/pjh7djx8/ -

+0

私はそれを調べるgiongを見る – frogeyedpeas

関連する問題