-1
Node.jsは新しくなっています私はAPIを呼び出し、何かをする前に結果を待っています。この場合nodejsを使用してAPIからの結果を待つ
// endpoint
function getListMarket() {
var deferred = Q.defer();
deferred.resolve(Q().then(getMarkets)
.then(calculIndicators));
return deferred.promise;
}
// Get a list
function getMarkets() {
var deferred = Q.defer();
bittrex.getmarketsummaries(function (data, err) {
if (err) deferred.reject(err.name + ': ' + err.message);
if (data) {
var listMarkets = [];
for (var i in data.result) {
listMarkets.push(data.result[i]);
}
deferred.resolve(listMarkets);
}
});
return deferred.promise;
}
// Update a Coin
function calculIndicators(coinList) {
var deferred = Q.defer();
var promises = [];
coinList.forEach(function (coin) {
promises.push(getCandles(coin).then(getIndicators(coin)));
});
Q.allSettled(promises).then(function (results) {
console.log('3 ---------------------------------------------');
var listMarkets = [];
results.forEach(function (r) {
console.log("result ok" + r.value.name);
});
deferred.resolve(listMarkets);
});
return deferred.promise;
}
// Get a information needed to update the coin
function getCandles(coin) {
var deferred = Q.defer();
bittrex.getcandles({
marketName: coin.MarketName,
tickInterval: 'hour', // intervals are keywords (oneMin, fiveMin, hour, thirtyMin, Day)
}, function (data, err) {
if (err) {
deferred.reject(err.name + ': ' + err.message);
}
if (data) {
console.log('1 : data');
coin.Test= 10;
deferred.resolve(coin);
}
});
return deferred.promise;
}
// Update the coin with the information from getCandles
function getIndicators(coin) {
console.log('2 : ' + coin.Test);
}
私は私の関数getListMarketを呼び出すときに、出力は次のようになります。
2 : undefined
2 : undefined
2 : undefined
...
1 : data
1 : data
1 : data
...
3 ---------------------------------------------
あなたは私を説明することができ、なぜログは、「2」は、この場合には1の前に呼ばれているのですか? 私はgetCandlesのAPIは非同期呼び出しだと思いますが、私はその理由を知りません。 getIndicators関数でこのapiの結果が必要です。
あなたがgetIndicatorsを呼び出しています早すぎる。 –