Nodejs promise的串行和并行

30 篇文章 0 订阅
1 篇文章 0 订阅
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/user', { useNewUrlParser: true });

const model = mongoose.model('user', mongoose.Schema({
    username: { type: String },
    password: { type: String },
    user_ssh: { type: String }
}, { collection: "user", versionKey: false, strict: true }));

const ping_1 = () => {
    return new Promise(resolve => {
        setTimeout(() => {
            resolve("1");
        }, 1000);
        //model.findOne({ username: "1" }, (error, doc) => resolve({ error: error, doc: doc }));
    });
};


const ping_2 = () => {
    return new Promise(resolve => {
        setTimeout(() => {
            resolve("2");
        }, 2000);
        //model.findOne({ username: "2" }, (error, doc) => resolve({ error: error, doc: doc }));
    });
};

const ping_3 = () => {
    return new Promise(resolve => {
        setTimeout(() => {
            resolve("3");
        }, 3000);
        //model.findOne({ username: "3" }, (error, doc) => resolve({ error: error, doc: doc }));
    });
};

const ping_4 = () => {
    return new Promise(resolve => {
        setTimeout(() => {
            resolve("4");
        }, 4000);
        //model.findOne({ username: "4" }, (error, doc) => resolve({ error: error, doc: doc }));
    });
};

const ping_5 = () => {
    return new Promise(resolve => {
        setTimeout(() => {
            resolve("5");
        }, 5000);
        //model.findOne({ username: "5" }, (error, doc) => resolve({ error: error, doc: doc }));
    });
};

const ping_6 = () => {
    return new Promise(resolve => {
        setTimeout(() => {
            resolve("6");
        }, 6000);
        // model.findOne({ username: "6" }, (error, doc) => resolve({ error: error, doc: doc }));
    });
};

ping_1()    //promise链式调用开始
    .then((data) => {
        console.log(data);
        return ping_2();
    }).then((data) => {
        console.log(data);
        return ping_3();
    }).then(data => {
        console.log(data);
        return ping_4();
    }).then(data => {
        console.log(data);
        return ping_5();
    }).then(data => {
        console.log(data);
        return ping_6();
    }).then((data) => {
        console.log(data)
    });


console.log("================================");

console.time("time");
Promise.all(  //promise.all 集中并行处理
    [
        ping_1(),
        ping_2(),
        ping_3(),
        ping_4(),
        ping_5(),
        ping_6()
    ]
).then((data) => {
    console.timeEnd("time");
    console.log(data);
});

可以发现,使用promise链式调用的时长耗费了21秒,而用promise.all则仅仅只有6秒

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值