Wpis z mikrobloga

#nodejs #javascript #programowanie

Taki problem mam. Chcę wywołać dwa zapytania do API (w kodzie funkcja

bittrex
). Jednakże, jak normalnie je wywołam to kiszka wychodzi, bo API mi zwraca nieprawidłowe dane. Gdy te funkcje wywołuję pojedynczo, wszystko działa normalnie.

Więc próbuję użyć biblioteki

q
i promises. Ale efekt cały czas ten sam... Może ktoś ma jakiś pomysł jak to ugryźć? Próbowałem wstawiać

setTimeout
w różne części kodu, ale i tak wywoływało się asynchronicznie.

Kod (

bittrex
to interfejs API,

winston
do logowania w konsoli):



function
```**```
 cena() {

    
```**```
var
```**```
 deferred = q.defer();

    bittrex.getticker({market: 
```_```
'BTC-'
```_```
 + config.coin}, 
```**```
function
```**```
 (ticker) {

        winston.info(
```_```
'Obecna cena '
```_```
 +  
```**```
parseFloat
```**```
(ticker.result.Last));

        deferred.resolve();

    });

    
```**```
return
```**```
 deferred.promise;

}

```**```
function
```**```
 stanKonta() {

    
```**```
var
```**```
 deferred = q.defer();

    bittrex.getbalance({currency: config.coin}, 
```**```
function
```**```
 (balance) {

        winston.info(
```_```
'Stan konta '
```_```
+ balance.result.Balance));

        deferred.resolve();

    });

    
```**```
return
```**```
 deferred.promise;

}

``````

cena().then(stanKonta());
  • 5
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@RonPaul: nie mam teraz za bardzo czasu sięwgryzać, ale jak do $.when(api, api2).then() przekażesz te dwa zapytania jako parametry i mają promisy to wykona się then dopiero jak przyjdą succesy z obu

może p------ę jeśli nei o to Ci chodzi
  • Odpowiedz
@RonPaul: Jeśli już deferrer to tylko dla jednego - przy pierwszym odpalasz i tylko jego status sprawdzasz. Robiłeś async przez callback? Poza tym, w callback'u dla then po prostu robisz then(stanKonta). Przekazujesz funkcje, a nie jej zwrotkę.
  • Odpowiedz
@Kemsan: Tak, próbowałem w callbackach...

Jak tutaj można wstawić timeout, żeby po wywołaniu pierwszej funkcji i skończeniu jej była przerwa zanim wywoła drugą? Bo podejrzewam, że to kwestia samego API. Jak pisałem - jak osobno funkcje wywołam, wszystko działa.

Właśnie przeczytałem drugi komentarz... o, to jest konkretna wskazówka. Dzięki.
  • Odpowiedz