CNode

【震惊】Node爆惊天大bug,影响数千万Node.js进程!他竟然一行代码就修复了!他到底做了啥?

问答
Zzengming00发布于9 年前最后回复9 年前7 回复6831 浏览0 收藏

很多天前old big让我测试在async中throw和return的效率,偶然踩中了坑

async function foo() {
    throw new Error();
}
(async function test() {
    for (let i = 0; i < 100000; i++) {
        try {
            await foo();
        } catch (e) {
        }
    }
})();
console.log('done');

是什么原因呢?

下面仅仅四行代码也硬了

for (let i = 0; i < 100000; i++) {
    Promise.reject().catch(e => { });
}
console.log('done');
// 只需一行代码。node就冷静下来了
global.Promise = require('bluebird');
for (let i = 0; i < 100000; i++) {
    Promise.reject().catch(e => { });
}
console.log('done');
查看回复

回复 (7)

K
kyriosli#1·9 年前

真是头条体。。 目测是Promise实现问题,node的promise是自己实现的,用的也不是v8的Promise

S
sunkuo#2·9 年前

楼主没有打印执行时间?

E
Equim-chan#3·9 年前

Node原生的Promise本来就有一些效率问题,之前bluebird的作者有提到过。 http://softwareengineering.stackexchange.com/questions/278778/why-are-native-es6-promises-slower-and-more-memory-intensive-than-bluebird

E
eyblog#4·9 年前

明天来UC震惊部上班

I
ImSiegeLion#5·9 年前

(¬_¬)真是学以致用

I
ImSiegeLion#6·9 年前

你成功通过了UC头条部的考核,请于明日到总部报道。

D
dlyt#7·9 年前

哈哈

参与回复
登录后即可参与回复。登录