2016-08-17 3 views
0

Ich habe ein Schema, das Cat-Informationen speichert. Ich möchte dann ein Array aller cat_urls schaffen, aber wenn ich das Array außerhalb des dbs Anruf nennen, das Array leerWarum wird die Array-Variable nach dem dbs-Aufruf nicht gespeichert - Knoten js

var cat_urls = []; 

Cat.find(function (err, data) { 
    var stringify = JSON.stringify(data) 
    content = JSON.parse(stringify); 
    content.forEach(function (result) { 
     cat_urls.push(result.cat_url); 
    }) 
    console.log(cat_urls, 'here') 
}) 

console.log(cat_urls, 'here not working') // I want cat_urls to also be populated here 

So Innerhalb der Cat.find() -Aufruf cat_urls Werte wie folgt hat:

[ 'www.hello.co.uk', 'www.testing.co.uk' ] 'here' 

aber außerhalb cat_urls = []

ich denke, dies mit der Tatsache zu tun, ist, dass der Knoten js nicht in einer bestimmten Reihenfolge läuft, aber wie kann ich lösen dieses Problem?

Antwort

1

Ich denke, es funktioniert, aber Ihre find Funktion gibt eine Zusage zurück, die asynchron löst.

Versuchen:

var cat_urls = []; 

Cat.find(function (err, data) { 
    var stringify = JSON.stringify(data) 
    content = JSON.parse(stringify); 
    content.forEach(function (result) { 
     cat_urls.push(result.cat_url); 
    }) 
    console.log(cat_urls, 'here') 
}).then(function(){ 
    // Promise has completed, now this console log will trigger only after the cat's names are pushed. 
    console.log(cat_urls); 
}) 
+0

Aber das Ziel ist in der Lage sein, diese außerhalb dieser Funktion aufzurufen - mit dem Array gefüllt werden, anstatt leere –

+0

@emisqwe Leider Art von Versprechungen sind, so dass sie gelöst werden müssen bevor Sie garantieren können, dass globale Variablen gesetzt sind. Wenn Sie bestimmte Funktionen ausführen müssen, können Sie sie in die Funktion innerhalb der Anweisung '.then (function() {})' einschließen oder sogar andere Funktionen innerhalb dieser Anweisung aufrufen. Hier ist ein Artikel, der Ihnen helfen kann, sich mit Versprechungen und deren Funktionsweise in Mongoose vertraut zu machen http://mongoosejs.com/docs/promises.html. – Mike

Verwandte Themen