Попытка сохранить снимок камеры в Chrome. У меня есть рабочий код с использованием метода Promise.resolve (). Then (). Catch (), и я хочу преобразовать в async / await.
Оригинальный код:
function onSnapshotButtonClick() {
imageCapture.takePhoto()
.then(blob => createImageBitmap(blob))
.then(imageBitmap => {
drawCanvas(imageBitmap);
})
.catch(error => console.error("Snapshot failed."));
console.log("Snapshot capture successful.");
})
Новый код:
var blob;
async function onSnapshotButtonClick() {
// Take snapshot
try {
blob = await imageCapture.takePhoto();
let imageBitmap = createImageBitmap(blob);
drawCanvas(imageBitmap);
} catch (error) {
console.error("Snapshot failed.");
}
console.log("Snapshot successful.")
// Do other stuff with blob...
})
Но при запуске кода выше я получаю оба «Снимок не удался». и «Снимок успешно выполнен». выводится на консоль, и ничто не обращается к холсту (эта функция была определена позже). Почему программа входит в блок catch, и не должна ли она выходить из функции, когда она это делает?
Редактировать: Спасибо, теперь я понимаю, что блок catch должен включать оператор return, и что я могу узнать больше об ошибке, напечатав error.message. Кажется, что imageBitmap не является допустимым форматом, и это вызывает проблему в версии async / await. Тогда остается вопрос, поскольку в оригинальной версии нет этой проблемы, что отличается в версии async / await, которая вызывает это изменение в поведении?