Я хочу вызвать функцию async из цикла do while и выйти, только если функция не возвращает значение. Есть ли способ управлять этим, не имея на самом деле wait вне обратного вызова?Node.js вызывает функцию async изнутри do while loop
Вот код, который, очевидно, всегда выходит в первом контуре, так как функция не перезвонил еще, когда в то время как() оценивается:
var i = 0;
do {
var foundListing;
if (i) {
listing.slug = listing.slug + '-' + (i + 1);
}
listingService.getListingBySlug(listing, function(error, pFoundListing) {
if (error) {
return callback(util.errorParser(error));
} else if (Object.keys(pFoundListing).length) {
foundListing = pFoundListing;
i++;
}
});
//Do I have to wait here???
} while (foundListing && Object.keys(foundListing).length);
Для Разъяснение: Здесь нужно создать уникальный слизень. Если slug уже существует, я добавляю номер и снова проверяю его, если он существует. Когда я доберусь до числа, которого еще нет, я закончен.
Обновление: Я нашел способ, использующий рекурсию. Я опубликовал рабочий фрагмент как answer.
где - объявление переменной «i» .. –
Вы пытаетесь установить асинхронный вызов в синхронной структуре. В основном код постоянно запускает вызовы 'listingService.getListingBySlug' на каждой итерации цикла, при максимальной скорости javascript может выполнять этот цикл. Вы уверены, что хотите сделать? –
@GiacomoCosimato Это наоборот. Поскольку 'foundListing' пуст в начале,' while() 'part всегда вычисляет false в первом цикле, потому что он установлен в обратном вызове, который еще не был выполнен. В любом случае, это не то, что я хочу. Я хочу только ввести цикл снова, если список был найден в 'listingService.getListingBySlug' – Chry007