2014-12-14 2 views
1

действия контроллера моего приложения имеет петлю при этом (в то время как (пункте = stream.read()))Sails.js - объект данных становится пустым, когда я был Exec()

, в котором, если я сделать следующее:

while (item = stream.read()) {   
    console.log(item); 
    } 

Я могу видеть объект элемента, хотя, если я делаю следующее:

while (item = stream.read()) { 
    Buzzfeed.find({'title': {'contains': item.title}}).exec(function(err, item) { 
     console.log(item); 
    }); 
} 

данные поступают как ряд пустых массивов

Для справки, вот ссылка на весь мой контроллер: http://pastebin.com/YQJTC9w0

Любопытно, где я иду не так?

+0

Вы подтвердили, что в вашей базе данных есть записи «Buzzfeed», чьи заголовки содержат возвращаемые значения «item.title»? Если нет, то эти пустые массивы могут быть ожидаемым выходом; вы будете делать несколько запросов, которые не будут возвращать результаты. – sgress454

ответ

2

Попробуйте

while (item = stream.read()) { 
    Buzzfeed 
    .find() 
    .where({'title': {'contains': item.title}}) 
    .exec(function(err, item) { 
     console.log(item); 
    }); 
} 

От Waterline ORM «s documentation, find используются, чтобы найти единые критерии. Вместо этого он должен использовать where, потому что ему нужен запрос «где» логика.

+1

Даже если код прав, его полезно включить некоторые объяснения. –

+1

Извините за это, благодарю вас за ваш совет. На самом деле, потому что мой английский плохой, мне сложно объяснить даже простое дело, LOL. Не повторится в будущем. –

+0

Синтаксис OP прекрасен; первым аргументом 'find' является предложение where. Цепочка '.where()' является необязательным альтернативным синтаксисом. Таким образом, ваш код функционально эквивалентен тому, что они разместили. – sgress454

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