2017-02-10 4 views
-1

Ich versuche, diese Funktion zu erhalten, meine Datenbank abzufragen und einige Details für das ausgewählte Element zurückzugeben. Es findet die Dinge in Ordnung, aber es scheint unbestimmt zurückzukehren.Warum gibt meine Funktion ein Array aus, das undefiniert zurückgibt?

var recipefunc = function(name) { 
     Item.find({name: name}, function(err, foundItem) { 
      if(err) { 
       console.log(err); 
      } else { 
       var image = foundItem[0].image; 
       var link = foundItem[0]._id; 
       var output = [image, link]; 
       console.log("function output:"); 
       console.log(output); 
       return [image, link]; 
      } 
    }); 
}; 

Die obige console.log gibt die richtigen Informationen in einem Array aus, aber macht es nicht weiter.

Ich versuche, es in dieses Objekt von Arrays, die bereits Teil eines größeren Objekts ist, hinzuzufügen.

var recipe = { 
     field1: recipefunc(req.body.field1), 
     field2: req.body.field2, 
     field3: req.body.field3, 
     field4: req.body.field4, 
     field5: req.body.field5, 
     field6: req.body.field6, 
     field7: req.body.field7, 
     field8: req.body.field8, 
     field9: req.body.field9, 
    }; 

Dies ist der Code, den ich mir zurück bekommen, bin ich nur auf Feld1 im Moment konzentriert, ich habe keine Daten an den anderen geliefert.

recipe: 
    { field9: '', 
    field8: '', 
    field7: '', 
    field6: '', 
    field5: '', 
    field4: '', 
    field3: '', 
    field2: '' }, 
+1

Weil es nichts zurückkehrt? Diese 'return'-Anweisung befindet sich im' find' Callback. – Bergi

+0

@Bergi wohin muss ich es verschieben? Immer noch lernen, tut mir leid, wenn es eine dumme Frage ist. –

+0

Angesichts der asynchronen Abfrage der Datenbank ist es eigentlich unmöglich, ein Ergebnis sofort "zurückzugeben". Siehe die kanonische Frage. – Bergi

Antwort

0
var recipefunc = function(name, callback) { 
     Item.find({name: name}, function(err, foundItem) { 
      if(err) { 
       console.log(err); 
      } else { 
       var image = foundItem[0].image; 
       var link = foundItem[0]._id; 
       var output = [image, link]; 
       console.log("function output:"); 
       console.log(output); 
       callback([image, link]); 
      } 
    }); 
}; 
+0

dies gibt mir einen [RangeError: Maximale Call-Stack-Größe überschritten] –

+0

@JoshKneale Welche Funktion übergeben Sie als Rückruf? – schroffl

+0

@schroffl Sorry, ich verstehe nicht, ich lerne immer noch –

Verwandte Themen