2017-03-18 2 views
0

Ich habe ein ernstes Problem mit Node.js
Ich entwickle eine API, um Daten von Facebook-Datenbanken mit GraphQL zurück zu bekommen und dann zurück senden JSON mit ausgewählte Daten.JSON - Warten auf Schleife zu beenden und dann Daten zum Rückruf

Das Problem kommt, wenn ich (mit einer for-Schleife) durch das Antwort-Array iteriert, um die nützlichen Daten auszuwählen, ich weiß nicht, wie man alle Daten erhält und dann an den Client senden. Ich dachte, dass bei jeder Iteration die Callback-Aufruf wäre schön, aber es hat nicht das Problem

Hier zu lösen, ist der Code von meiner API

Lesen von Daten aus GraphQL
FB.api (‘ me/feed ', ...) gibt ein Array aller Daten zurück.
Der zweite Aufruf gibt einzelne Posten Details, das ist der wichtigste Teil (ich habe eine Reihe von diesen Details an den Client im JSON-Format zurückzukehren)

module.exports = function (start, end, callback) { 
    if (start > end) throw 'Start is greater than end'; 

    FB.api('me/feed', function (res) { 
    // Error handling 
    if (!res || res.error) { 
     throw 'FB error occurred: ' + res.error; 
    } 
    console.log('FB: OK'); 

    for (let i = start; i < res.data.length && i != end; i++) { 
     FB.api(res.data[i].id + '/attachments', function(post) { 
     callback({ 
      id: res.data[i].id, 
      type: post.data[0].type, 
      postDesc: res.data[i].message.split('\n\n')[0], 
      postUrl: post.data[0].url, 
      imagePreviewUrl: post.data[0].media.image.src 
     }); 
     }); 
    } 
}); 
} 
+0

Sie könnten in eine Bibliothek wie [async] (http://caolan.github.io/async/) schauen oder Versprechen verwenden. – forrestmid

+0

Ich versuchte mit async lib, aber ich weiß nicht, was zu verwenden, ich habe mit async.seq getestet, aber das Ergebnis ist das gleiche, ich muss warten, um die for-Schleife zu synchronisieren oder es gibt ein leeres Array zurück –

Antwort

0

Gelöst ist das Problem!
Ich habe async.each() von async Bibliothek verwendet!

Verwandte Themen