正しく動作する価格データのAPIを呼び出しています。しかし、私は変数exchange_pair_id
をthen()
関数に渡そうとしています。forEachループ内のrequest-promise関数に変数を渡す
forEachループの内部では、exchange_pair_idはそれぞれasset
に対して正しいです。しかし、then()
関数内では、この変数は常に同じです(forEachループの最後の値)。
私はここでは、非同期の問題が発生しているthen(function(response) {...}
response.forEach(function(asset) {
var assets = asset['assets'];
exchange_pair_id = asset['exchange_pair_id'];
options.uri = exchange_objects[exchange[0]].ticker + '?pair=' + assets[0] + assets[1]; // overwrite to fit the request to Kraken API
console.log(exchange_pair_id) // unique
rp(options).then(function(response) {
key = Object.keys(response['result']);
price_data = response['result'][key];
console.log(exchange_pair_id) // duplicate
});
});
これはうまくいくはずです。コールバック関数のコンテキストで毎回exchange_pair_idを定義するので、試してみてください –
@MarouenMhiriは、あなたの変数を適切にスコープする必要があると言います。 'var'、' let'または 'const'というキーワードのない各変数はグローバル変数です。あなたはforEachでスコープを設定したいので、 'var exchange_pair_id;'と書くことが重要です。 –
両方のおかげで、私は今朝何時間も動揺してしまった非常にアマチュアなミス。変数の適切な宣言を理解していないため、私のせいです。 – Nick