【发布时间】:2019-10-09 00:38:40
【问题描述】:
我无法理解 javaScript promises。我写了以下代码:
var p = new Promise(function(resolve,reject){
reject(Error("hello world"));
});
setTimeout(()=>p.catch(e=>console.log(e)),5000);
我以前从未在我的 javaScript 代码和开发人员控制台之间看到这种行为,我的 javaScript 代码可以在开发人员控制台中“修改现有内容”。
所以我决定写下这段代码,看看resolve是否会出现同样的情况:
var p = new Promise(function(resolve,reject){
resolve("hello world");
});
setTimeout(()=>p.then(e=>console.log(e)),5000);
但在这种情况下,我的开发者控制台直到 5 秒后才显示任何内容,然后它会打印 hello world。
为什么resolve 和reject 在被调用时的处理方式如此不同?
额外
我也写了这段代码:
var p = new Promise(function(resolve,reject){
reject(Error("hello world"));
});
setTimeout(()=>p.catch(e=>console.log("errors",e)),5000);
setTimeout(()=>p.catch(e=>console.log("errors 2",e)),6000);
setTimeout(()=>p.catch(null),7000);
这会导致开发者控制台出现多个输出。在时间 0 出现红色错误,在时间 5 秒时红色变为黑色并带有文本 errors hello world,然后在时间 6 秒时出现新的错误消息 errors 2 hello world,然后在时间 7 秒时出现红色错误消息。现在我很困惑reject 实际被调用了多少次......我迷路了......
【问题讨论】:
-
顺便说一句:
var p = new Promise(function(resolve,reject){ reject(Error("hello world")); });可以更惯用、更简洁地写成var p = Promise.reject(Error("hello world"));:-) -
很棒的问题。
标签: javascript asynchronous promise