This is obviously a SSCCE. I have the following (jsFiddle here):
<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>
When the user is using the file dialog to select a file, I expect nothing at all to be printed on the console as the Error
is caught and the promise's reject
function is called. In contrast, I am expecting the error to appear on the console with the description "some error happened" only when I click the "submit" button.
Yet, this is not what I observe. As soon as the user selects a file with the dialog I see on the console:
Uncaught (in promise) Error: snafu(…)
When the user presses the "submit" button I do see the expected log line "some problem happened" but I don't understand why I also see the earlier "Uncaught (in promise)" log line when the user selects a file with the file dialog. I also don't see why the error is described as "Uncaught" given that I catch (unconditionally) all exceptions and simple invoke the reject
function.
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…