Node: Axios/Fetch resultaten in een Var krijgen

Pagina: 1
Acties:

Vraag


  • argon007
  • Registratie: April 2011
  • Laatst online: 12:26
Hallo,

Ik ben dus geen programmeur maar probeer enkel projectjes die in mijn hoofd zitten uit te werken. Ik maak gebruik van axios om een Json file in te laden van de Crypto Exchange Binance. Uit die Json wil ik dan enkele zaken filteren en verder gebruiken in het script.

Ik sla er echter niet in op de uitvoer van het axios script in een variabele te verkrijgen. Ik heb op heden het volgende werkend gekregen:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
const axios = require("axios");
async function getinfo(){

  let json = await axios.get('https://api.binance.com/api/v3/exchangeInfo');

  return json;
}

(async()=>{
let abc = await getinfo()

console.log(abc.data)
})();



Is er echter een mogelijkheid dat ik dat volledige Json object kan gebruiken als een variable buiten die axios functie? Ik verklaar mijn vraag wat nader met dummy code:

code:
1
2
3
4
5
6
7
8
9
10
const axios = require("axios");

var abc = async function getinfo(){

  let json = await axios.get('https://api.binance.com/api/v3/exchangeInfo');

  return json;
}

console.log(abc.data)


Of vraag ik hier het onmogelijke? Het hoeft niet perse met axios te werken, het mag dus ook gerust met fetch of xmlhttprequest of ...

Ik heb mij hier vanadag sul op gezocht maar schakel nu toch de hulp in van mensen die hier meer kennis over hebben :-)

Bedankt!

Alle reacties


  • Marco1994
  • Registratie: Juli 2012
  • Laatst online: 14:24
Het is mij niet geheel duidelijk wat je vraag nou precies is. Is je vraag hoe je die json data buiten de async syntax kan gebruiken? Of loop je ergens anders op vast?

[ Voor 22% gewijzigd door Marco1994 op 20-02-2020 21:35 ]


  • reputatio
  • Registratie: Mei 2017
  • Laatst online: 12:35
Je kunt het zeker buiten de functie gebruiken, nu krijg je waarschijnlijk terug dat data undefined is.

Wat je moet doen is wachten op de abc functie, dus iets als:
code:
1
2
3
4
5
6
7
8
9
10
11
 const axios = require("axios");

var abc = async function getinfo(){

  let json = await axios.get('https://api.binance.com/api/v3/exchangeInfo');

  return json;
}

let json = await abc();
console.log(json)


Als je namelijk niet wacht op de functie ‘abc’, gaat JavaScript door. Het is niet zoals andere programmeertalen dat van boven naar onder werkt, line voor line. Je moet de instructie geven dat hij dus moet wachten tot de functie is geslaagd.

Ik weet alleen niet hoe de axios library in elkaar zit, maar ik denk niet dat je nu een object terug krijg, maar juist een string. Wat je kunt doen is een [code]JSON.parse(json)[code] ertussen zetten, dan kun je er wel wat mee doen ;)

  • argon007
  • Registratie: April 2011
  • Laatst online: 12:26
@Marco1994 : klopt, ik wil de Json data buiten die async syntax gebruiken om hier verder in het script andere commandos op te kunnen uitvoeren.

@reputatio als ik jou suggestie probeer dan krijg ik het volgende terug:
code:
1
2
3
4
5
6
7
8
9
10
const axios = require("axios");
var abc = async function getinfo(){

  let json = await axios.get('https://api.binance.com/api/v3/exchangeInfo');

  return json;
}

let blabla = await abc();
console.log(blabla)


code:
1
2
3
4
let blabla = await abc();
             ^^^^^

SyntaxError: await is only valid in async function

  • Gropah
  • Registratie: December 2007
  • Niet online

Gropah

Admin Softe Goederen

Oompa-Loompa 💩

Waarom niet promises gebruiken zoals ook op hun github staat uitgelegd?

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 12:51

MueR

Admin Tweakers Discord

is niet lief

await kan inderdaad alleen binnen de context van een async function. Dus dan zit je eerder aan iets als dit:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
let getExchangeInfo = new Promise((resolve, reject) => {
    let json = await axios.get('https://api.binance.com/api/v3/exchangeInfo');
    return json
});
getExchangeInfo
    .then((json) => {
        console.log(json)
        // do something with the data
    })
    .error((e) => {
         console.log('Error', e)
    })

Anyone who gets in between me and my morning coffee should be insecure.


  • Marco1994
  • Registratie: Juli 2012
  • Laatst online: 14:24
Je kan dan inderdaad twee routes bewandelen, async/await of promises. In het geval van async await zul je de functie die iets met de json data doet ook async moeten maken. Zoals je doet in je eerste code block. Je hebt nu gekozen voor een anonieme functie maar dat hoeft niet. Op een gegeven moment heb je een async functie doSomething die je simpel weg niet await.

  • argon007
  • Registratie: April 2011
  • Laatst online: 12:26
@MueR Met uw code wil dit dan ook zeggen dat ik mijn andere +100 lijnen code tussen die .then(json) => moet zetten?

code:
1
2
3
4
5
6
7
8
getExchangeInfo
    .then((json) => {
        console.log(json)
       // Alle andere lijnen code die ik nodig heb in het script
    })
    .error((e) => {
         console.log('Error', e)
    })


Zoals aangegeven, programmeren/scripten is redelijk nieuw voor mij. Dus ik dacht dat het makkelijk was om die Axios datat in een variable te krijgen om daar dan verder mee te werken. Maar het lijkt net wat moelijker te liggen, of ik heb een volledige foute approach in mijn gedachten :-)

Acties:
  • +1 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 12:51

MueR

Admin Tweakers Discord

is niet lief

Err, dat kan.. maar dat is ook niet echt de correcte manier van werken. Als je puur aan het experimenteren bent kan dat uiteraard prima, maar zodra je echt een wat grotere applicatie wil bouwen, moet je echt even meer weten over promises enzo. Ik gaf je alleen een handvat, niet de oplossing voor alles ;)

Anyone who gets in between me and my morning coffee should be insecure.

Pagina: 1