Итак, я несколько раз избивал это в течение нескольких дней, и я в тупике, что является лучшим способом его решения. Я использую ватерлинию/dogwater с HAPI и пытаюсь сделать что-то в широком смысле, как так: -Выполнение асинхронной операции в обещании bluebird
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), но моя версия узла исправлена в pre 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');
});
});
Что является лучшим способом сделать это максимально эффективно?
Справка приветствуется. С удовольствием вернемся сюда и сосредоточимся на вопросе, где это необходимо.
Вы можете используйте код asynchrounus js, как блокирующий код, используя функции ecmascript 6. Взгляните на Task.js (http://taskjs.org/), но я не уверен, поддерживает ли ваша среда js эти es6 apis. –
Предполагая подчеркнуть/lodash - _.each не async. –
@BenjaminGruenbaum Но db.colors.find, кажется, возвращает обещание, которое делает все асинхронным. Если 'yield' доступен, вы можете использовать Task.js для выполнения этого обещания до тех пор, пока он выполняется. –