Ожидайте... отложите в цикле forEach
Должен ли этот код возвращать 12334 или 12433?
Я ожидаю 12334, но это дает 12433...
console.log '1'
anArray.forEach (info, index, array)->
console.log '2'
await model.findOne info, defer(err, doc)
console.log '3'
console.log '4'
1 ответ
Решение
Ваша интуиция неверна: IcedCoffeeScript's await...defer
не может заблокировать синхронный forEach
петля.
Помните, что IcedCoffeeScript компилируется в JavaScript, который не поддерживает блокировку. Как только вы позвонили forEach
в массиве вы обязались выполнить итерацию по всему массиву до того, как сработают какие-либо события.
Хорошей новостью является то, что вы можете получить желаемое поведение, используя собственные циклические конструкции IcedCoffeeScript. В твоем случае,
for info, index in anArray ->
...
Для получения дополнительной информации о работе с неблокирующей моделью событий JavaScript, посмотрите мою новую книгу, Async JavaScript.