2017-02-10 3 views
-1

Я пытаюсь получить эту функцию для запроса моего db и вернуть несколько деталей для выбранного элемента. Он находит элементы в порядке, но, похоже, возвращается неопределенно.Почему моя функция выводит массив, возвращаемый undefined?

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]; 
      } 
    }); 
}; 

Консоль.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: '' }, 
+1

Потому что он ничего не возвращает? Этот оператор 'return' находится в обратном вызове' find'. – Bergi

+0

@ Bergi, где я должен его переместить? Все еще учиться, извините, если это глупый вопрос. –

+0

Учитывая, что запрос базы данных асинхронен, на самом деле невозможно сразу вернуть результат. См. Канонический вопрос. – Bergi

ответ

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

это дает мне [RangeError: Максимальный размер стека вызовов] –

+0

@JoshKneale Какую функцию вы передаете как обратный вызов? – schroffl

+0

@schroffl извините, я не понимаю, я все еще участвую –

 Смежные вопросы

  • Нет связанных вопросов^_^