Итак, я бил это в течение нескольких дней, и я в тупике относительно того, как лучше всего решить эту проблему. Я использую Waterline/dogwater с HAPI и пытаюсь сделать что-то вроде этого: -
wardrobe.find({WardrobeId: 5}).then(function(clothes) {
//got my clothes in my wardrobe.
clothes.find({Type: 'trousers'},{Kind: 'nice ones'}).then(function(trousers) {
//got my nice trousers
_.each(trousers, function(trouser) {
//logic to see if these are my pink trousers
console.log('color?', trouser.color);
});
console.log('ding');
});
});
У меня проблема в том, что код всегда будет ding
до того, как выведет цвета брюк. Это потому, что, насколько я понимаю, _.each
сделает код асинхронным. Я пытался внедрить Promises (bluebird), но безуспешно. Я даже посмотрел на генераторы (Co), но моя версия узла исправлена до v0.11.
Я хотел бы выполнить некоторые поиски в базе данных в _.each
, вернуть эти результаты (если есть) в объект брюк, который затем может быть возвращен: -
wardrobe.find({WardrobeId: 5}).then(function(clothes) {
//got my clothes in my wardrobe.
clothes.find({Type: 'trousers'},{Kind: 'nice ones'}).then(function(trousers) {
//got my nice trousers
_.each(trousers, function(trouser) {
//logic to see if these are my pink trousers
db.colors.find({Color: trouser.color}).then(function(color) {
//color here?
});
});
console.log('ding');
});
});
Как лучше всего сделать это максимально эффективно?
Помощь приветствуется. Рад вернуться сюда и сфокусировать вопрос там, где это необходимо.
yield
доступен, вы можете использовать Task.js, чтобы выполнить это обещание, пока оно выполняется. - person Nick Russler   schedule 13.11.2014_.each
является асинхронным, и ^, как указано выше, код всегда будет звонить до завершения каждого, независимо от размера массива, предоставленного каждому. Если предположить, что это был вопрос? - person dooburt   schedule 13.11.2014yield
недоступно, извините. - person Nick Russler   schedule 13.11.2014_.each
дезинформации ;) - person dooburt   schedule 13.11.2014