似乎在调用Promise.resolve()
时,此Promise对象仅创建一次并存储在堆上的某个位置,稍后再次调用Promise.resolve()
时,它不需要额外的运行时间。我尝试了以下代码:
let outerStart = new Date().getTime();
Promise.resolve()
.then(() => {
console.log(`outer check:\t${new Date().getTime() - outerStart} ms`);
})
.then(() => {
console.log(`outer end:\t${new Date().getTime() - outerStart} ms`);
})
.then(() => {
let innerStart = new Date().getTime();
Promise.resolve()
.then(() => {
console.log(`inner check:\t${new Date().getTime() - innerStart} ms`);
})
.then(() => {
console.log(`inner end:\t${new Date().getTime() - innerStart} ms`);
});
});
控制台上的结果如下:
outer check: 16 ms
outer end: 17 ms
inner check: 0 ms
inner end: 0 ms
,这意味着第二次调用Promise.resolve()
时,会立即创建新的Promise对象。有没有人发现相同的,也许有一些解释?非常感谢!
答案 0 :(得分:1)
CognitoInternalErrorException
毫秒,但它不是0
微秒。 0
与console.time
一起使用,以微秒
console.timeEnd

答案 1 :(得分:0)
通过删除console.log引起的任何时序变化 - 结果完全不同
var t = (function() {
var times = {};
var starttime = (...names) => {
var now = performance.now();
names.forEach(name => times[name] = {start: now});
}
var endtime = name => times[name].end = performance.now();
var showtime = () => Object.entries(times).forEach(entry => console.log(entry[0], (entry[1].end - entry[1].start) * 1e3 | 0));
return {starttime, endtime, showtime};
}());
Promise.resolve()
.then(() => {
t.endtime('outer_check');
})
.then(() => {
t.endtime('outer_check_2');
})
.then(() => {
Promise.resolve()
.then(() => {
t.endtime('inner_check')
})
.then(() => {
t.endtime('inner_check_2');
}).then(() => {
t.showtime();
});
t.starttime('inner_check', 'inner_check_2');
});
t.starttime('outer_check', 'outer_check_2');