Вы должны использовать обещания, чтобы контролировать свой код. Попробуйте следующий код и сообщите мне, если есть ошибка.
Recipe.find().then(doc3 => {
data = doc3;
for (var i = 0; i < data.length; i++) {
data[i]['categories'].forEach((item, index) => {
Recipecat.findOne({_id: item}).then(result => {
item = result.name;
catsObjectId.push(item);
});
})
}
console.log(catsObjectId);
})
.catch(err => {
console.log(err);
});
Команда направляющих и многие другой rubyists предпочитают использовать фигурные скобки для блоков строки и do...end
для многострочных.
единственное функциональное различие между этими двумя - то, что приоритет do...end
блок ниже, чем что {...}
блок.
Согласно книга "Кирки" (я смотрю на 2-й выпуск здесь), корректный Gordon: единственной разницей является приоритет:
p.356 (мой курсив):
Фигурные скобки имеют высокий приоритет;
do
имеет низкий приоритет. Если вызов метода будет иметь параметры, которые не включаются в круглые скобки, , то форма фигурной скобки блока свяжет с последним параметром, не с полным вызовом . Этиdo
форма будет связывать с вызовом .
См. также p.168 для примера.
Две формы эквивалентны.
рекомендуемый стиль должен использовать фигурные скобки для блоков строки и использовать - "заканчиваются" для многострочных блоков.
Редактирование: Austin Ziegler указанный (в комментарии ниже), что две формы имеют уровни приоритета различия: Фигурные скобки имеют более высокий приоритет. Поэтому при вызове метода без круглой скобки блок включенный в {} свяжет с последним аргументом вместо вызывающего метода.
следующий пример был предложен Austin:
def foo
yield
end
puts foo { "hello" }
puts foo do
"hello"
end
первое "помещает" печать "привет": нечто получает названный возврат "привет", который является аргументом, помещает.
вторые залоги с ошибкой:
in `foo': no block given
, Так как в этом случае блок-конца связывает с, помещает метод.
Еще раз спасибо в Остин для разрешения этого.
Ответом Gordon является "Ruby Путь", и хотя это - обычная практика для помещения одной строки в фигурные скобки, он не требуется.
Также отмечают простоту, с которой может действовать на получающееся значение:
cmds.each do |cmd| cmd.upcase! end.sort
# Now, cmds = ["CREATE", "HELP", "LIST", "UPDATE"]
, Хотя Вы могли бы уже видеть, как {}
более читаемо здесь и поэтому предпочтенный, если кто-либо еще собирается видеть Ваш код:
cmds.each { |cmd| cmd.upcase! }.sort
Чаще всего разработайте 1, используется для многолинейных блоков, и стиль 2 используется для острот.
do…end
синтаксис тесно напоминает другие управляющие структуры Ruby (если, определение, класс), таким образом использование этого для блоков сохраняет появление Вашего кода последовательным и ясным. Но это не работает хорошо на остроты, который является, почему версия скобок предпочтена там.
Я не думаю, что это действительно имеет значение - что это - просто эстетический личный выбор. Некоторые люди предпочитают использовать do...end
версия, когда блоку нужны несколько строк и {...}
версия когда все на одной строке.