我正在学习JavaScript中的promise,我决定实现一个简单的promise,我将设置一个3秒的超时,然后拒绝promise。在拒绝它时,我捕获错误并将其显示在HTML元素中。promise工作得很好,并显示了消息,但我在控制台中得到了以下错误。
Uncaught (in promise) I hate you
Promise.then (async)
(anonymous)
下面是代码供大家参考--
const myPromise = new Promise(function(myResolve, reject) {
setTimeout(() => {
reject('I hate you');
}, 3000);
});
myPromise.then(function(value) {
document.getElementById("demo").innerHTML = value;
});
myPromise.catch( error => {
console.log("Catching it");
document.getElementById("demo").innerHTML = error;
});
<h2>JavaScript Promise</h2>
<p>Wait 3 seconds (3000 milliseconds) for this page to change.</p>
<h1 id="demo"></h1>
请帮我找出我犯的错误。
3条答案
按热度按时间cfh9epnr1#
您需要在.then之后捕获错误
pwuypxnk2#
这个应该能用
dzjeubhm3#
更新
感谢tlvi38对已接受答案的评论,我现在理解了我的查询,OP发布的原始问题中未捕获的问题可以通过为未链接的
then
返回的新promise添加单独的catch
块来解决,如下所示:ORIGINAL因为我不能添加评论,我写这作为一个答案,但我观察到,除了接受的答案,如果你只有像下面这样的
catch
块,它也没有任何问题。但是,如果
then
和catch
两者都没有链接起来,则以任何顺序在控制台中给出Uncaught error..
。有人能解释一下为什么吗?