[NodeJS] Hoe data uit function terug krijgen in var?

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • DennusB
  • Registratie: Mei 2006
  • Niet online
Hi Tweakers,

Sinds een tijdje probeer ik weer eens wat nieuwe programmeer talen op te pakken en omdat ik nu ook een Homey heb wil ik weer eens aan de slag met NodeJS. In het verleden simpele scripts/tooltje mee gemaakt en dat ging prima. Maar nu zit ik in de knoop met die callback, dat is vrij nieuw voor me.

Ik wil als test een dood simpele RSS reader maken, heb onderstaande code (ja, het is niet netjes nu) :

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
"use strict";
var parser = require('rss-parser');

function init() {
var testarray = []
function getData(value){
        //console.log('Getting data for : '+value['title']);
        testarray.push(value['title']);
        return(testarray);
}
function execute(someFunction, value) {
        return(someFunction(value));
}

function showLatest(array){
        console.log("Latest one:"+array[0]);
}


//console.log (execute(getData, "Hello"));

var parser = require('rss-parser');

parser.parseURL('https://tweakers.net/feeds/nieuws.xml', function(err, parsed) {
  console.log(parsed.feed.title);
  parsed.feed.entries.forEach(function(value){ dataArray = execute(getData, value);
 })
showLatest(dataArray);
})

}


In basis werkt het prima, hij haalt de feed op, lepelt de titels er uit en die kan ik ook prima laten printen op de console in de forEach loop. Maar, ik wil dat hij alles in 1 array stopt en me die array terug geeft. Dus ik roep de getData function aan, die alles een array in pusht. Nu is alleen de grote vraag, hoe krijg ik de array terug BUITEN de anonymus function die als callback op de forEach zit? Je ziet al dat ik daar een dataArray = doe om te kijken of ik het result er zo uit kan vissen, maar als ik vervolgens buiten die forEach een console.log wil doen van dataArray is hij leeg..

Het zal vast dood simpel zijn, maar na een dag Googlen ben ik nog niet verder. Iemand hier de gouden tip?

Owner of DBIT Consultancy | DJ BassBrewer


Acties:
  • +2 Henk 'm!

  • expor
  • Registratie: Juni 2005
  • Laatst online: 01-10 22:53
Misschien slaat het nergens op maar; net als voor je testarray hem buiten de functie declareren?

AMD 5800X3D | 16gb DDR 4 @ 3800/14 | 4070 Ti | 1TB Samsung Evo 970, 1TB Samsung Evo 860, 512MB Crucial


Acties:
  • 0 Henk 'm!

  • DennusB
  • Registratie: Mei 2006
  • Niet online
expor schreef op dinsdag 8 augustus 2017 @ 12:08:
Misschien slaat het nergens op maar; net als voor je testarray hem buiten de functie declareren?
Holy shit, dat ik dit zelf niet heb verzonnen.... het werkt ! Thanks. _/-\o_

Owner of DBIT Consultancy | DJ BassBrewer


Acties:
  • 0 Henk 'm!

  • q-enf0rcer.1
  • Registratie: Maart 2009
  • Laatst online: 13:20
Wellicht ken je array.map nog niet?

https://developer.mozilla.../Global_Objects/Array/map

code:
1
2
3
4
// ergens bovenaan, ter hoogte van waar nu testArray staat
let dataArray;
// in je async function
dataArray = parsed.feed.entries.map(value => value.title); // ES6 syntax, zoveel eenvoudiger  _/-\o_

[ Voor 16% gewijzigd door q-enf0rcer.1 op 08-08-2017 18:59 ]


Acties:
  • 0 Henk 'm!

  • PageFault
  • Registratie: April 2002
  • Laatst online: 07-10 13:02
Een domme vraag van mijn kant: waarom roep je execute aan ipv direct GetData?

Nu heb je:

dataArray = execute(getData, value);

en volgens mij zou dat ook direct dit kunnen zijn:

dataArray = getData(value);

Of zie ik dat verkeerd? Excuses als het een domme vraag is.

Acties:
  • +1 Henk 'm!

  • DennusB
  • Registratie: Mei 2006
  • Niet online
PageFault schreef op woensdag 9 augustus 2017 @ 09:41:
Een domme vraag van mijn kant: waarom roep je execute aan ipv direct GetData?

Nu heb je:

dataArray = execute(getData, value);

en volgens mij zou dat ook direct dit kunnen zijn:

dataArray = getData(value);

Of zie ik dat verkeerd? Excuses als het een domme vraag is.
Nee, heb je helemaal gelijk in. Maar dit deed ik om een beetje te oefenen met callback's & functies. Dat is er nu dus uit!

Owner of DBIT Consultancy | DJ BassBrewer


Acties:
  • +1 Henk 'm!

  • PageFault
  • Registratie: April 2002
  • Laatst online: 07-10 13:02
Ik ben geen programmeur, maar vroeg me dat af. Ik probeer een beetje de meeste code die hier passeert te begrijpen :)

Oefenen is altijd goed.

Acties:
  • +1 Henk 'm!

  • q-enf0rcer.1
  • Registratie: Maart 2009
  • Laatst online: 13:20
PageFault schreef op woensdag 9 augustus 2017 @ 10:07:
Ik ben geen programmeur, maar vroeg me dat af. Ik probeer een beetje de meeste code die hier passeert te begrijpen :)

Oefenen is altijd goed.
Het loont ook jezelf in te lezen rond de mogelijke array methods voor JavaScript. Een forEach method gebruiken om via een omweg alleen een array te mappen is eigenlijk een beetje gek als daarvoor een method aanwezig is. Paar andere toffe methods zijn reduce en filter, beide gebruik ik ze al een tijdje met veel plezier. Maakt de code een stuk eenvoudiger.
Pagina: 1