Я все еще новичок с асинхронностью и ожиданием, но это то, с чем я работаю.
async function _getImageURLs(folder) {
if (!id) return;
foo.AWSS3Helper.GetImageUrls(so, function (imageUrls) {
return await imageUrls;
});
}
Функция _getImageURLs() по-прежнему возвращается, не дожидаясь завершения AWSS3Helper.GetImageUrls. Я предполагаю, что это как-то связано с функцией обратного вызова. Должен ли обратный вызов также быть асинхронным?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Используйте await для функции, а не для оператора return
async function _getImageURLs(folder) {
if (!id) return;
foo.AWSS3Helper.GetImageUrls(so, await function (imageUrls) {
return imageUrls;
});
}Попробуйте с наблюдаемыми. Что-то вроде этого...
function _getImageURLs(folder) {
if (!id) return;
const imageUrlObservable = of(foo.AWSS3Helper
.GetImageUrls(so, function (imageUrls) {
return imageUrls;
})
);
imageUrlObservable.subscribe({
next(imageUrL) { console.info(imageUrL) },
complete() { console.info('Finished sequence'); }
});
}
Насколько я вижу, здесь нет обещаний, у вас есть механизм обратного вызова на API, поэтому использование async/await кажется бессмысленным.
вы должны передать обратный вызов методу и вызвать его, как только у вас будет доступен результат
function _getImageURLs(folder, callback) {
if (!id) callback();
foo.AWSS3Helper.GetImageUrls(so, function (imageUrls) {
callback(imageUrls);
});
}
_getImageURLs("somefolder", function(result) {
console.info(result);
// do whatever you want here with the result
};