Это, очевидно, SSCCE.У меня есть следующее (jsFiddle здесь ):
<html>
<body>
<input id='file-dlg' type='file'/>
<br/>
<button id='submit' type='button'>submit</button>
<script>
document.getElementById('file-dlg').addEventListener('change', storeAPromise);
var p;
function storeAPromise() {
p = new Promise(function executor(resolve, reject) {
try {
throw new Error('snafu');
} catch(e) {
reject(e);
}
});
};
document.getElementById('submit').onclick = function() {
p.then(function() {}, function reject(e) {
console.error('some problem happenned', e);
});
};
</script>
</body>
</html>
Когда пользователь использует диалоговое окно файла, чтобы выбрать файл, я не ожидаю, что на консоли вообще ничего не будет напечатано, так какError
перехватывается и вызывается функция обещания reject
.Напротив, я ожидаю, что ошибка появится на консоли с описанием «произошла какая-то ошибка», только когда я нажму кнопку «отправить».
Тем не менее, это не то, что я наблюдаю.Как только пользователь выбирает файл с диалоговым окном, которое я вижу на консоли:
Uncaught (in promise) Error: snafu(…)
Когда пользователь нажимает кнопку «отправить», я вижу ожидаемую строку журнала «произошла какая-то проблема», но я неНе понимаю, почему я также вижу более раннюю строку журнала «Uncaught (in обещание)», когда пользователь выбирает файл с диалоговым окном файла.Я также не понимаю, почему ошибка описывается как «Uncaught», учитывая, что я перехватываю (безусловно) все исключения и просто вызываю функцию reject
.