我在理解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"));
:-)