Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么输出数组的函数返回未定义?_Javascript_Node.js_Express_Mongoose - Fatal编程技术网

Javascript 为什么输出数组的函数返回未定义?

Javascript 为什么输出数组的函数返回未定义?,javascript,node.js,express,mongoose,Javascript,Node.js,Express,Mongoose,我正在尝试使用此函数查询我的数据库并返回所选项目的一些详细信息。它可以找到项目,但似乎返回未定义 var recipefunc = function(name) { Item.find({name: name}, function(err, foundItem) { if(err) { console.log(err); } else { var image = foundItem[0].

我正在尝试使用此函数查询我的数据库并返回所选项目的一些详细信息。它可以找到项目,但似乎返回未定义

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];
          }
   });
};
上面的console.log在一个数组中输出正确的信息,但不会使它超出这个范围

我试图将它添加到这个数组对象中,它已经是一个更大对象的一部分了

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,
    };
这是我得到的返回给我的代码,我现在只关注field1,我没有向其他人提供数据

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

因为它什么都不退?该
return
语句位于
find
回调中。@Bergi我必须将其移动到哪里?仍在学习,如果这是一个愚蠢的问题,请道歉。鉴于数据库查询是异步的,实际上不可能立即
返回结果。请看规范问题。@Bergi,但我不会立即返回结果吗?它在回调中,所以一旦执行了查询,就用它来执行“这个”。不您链接到我的页面也是关于返回在查询之外的。是的,在执行查询时将发生回调,但到那时,
recipefunc
已经返回了
未定义的
。这给了我一个[RangeError:超过最大调用堆栈大小]@JoshKneale您将什么函数作为回调传递?@schroffl抱歉,我不明白,我还在学习
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]);
          }
   });
};