Promise对象的基本使用

promise对象用于将node.js中的异步函数串行执行,串行执行的情况可以分为以下两种情况:

串联

使用then方法,每次返回promise对象或其他参数。

let startTime = Date.now();
function fun1() {
    let err = null;
    let start = Date.now()-startTime;
    return new Promise((resolve,reject)=>{
        setTimeout(()=>{
            if(err){
                reject(err);
            }else{
                resolve(`fun1 start:${start}\tend:${Date.now()-startTime}`);
            }
        },2000)
    })
}
function fun2() {
    let err = null;
    let start = Date.now()-startTime;
    return new Promise((resolve,reject)=>{
        setTimeout(()=>{
            if(err){
                reject(err);
            }else{
                resolve(`fun2 start:${start}\tend:${Date.now()-startTime}`);
            }
        },1000)
    })
}

fun1()
.then((data)=>{
    console.log(data);
    return fun2();
})
.then((data)=>{
    console.log(data);
    console.log(`fun3 start:${Date.now()-startTime}`);
});

输出结果

un1 start:0     end:2005
fun2 start:2029 end:3033
fun3 start:3035

通过输出结果可以看出,fun2是在fun1执行完成之后,fun3则是在fun2之后完成的,fun3开始执行的时间=fun1+fun2的执行时间。这种情况对应的适用场景例如,fun1从数据库抓取数据,fun2对数据进行整理,fun3将后端数据传递给前端模板。

并联+串联

使用Promise.all方法

Promise.all([fun1(),fun2()])
.then((data)=>{
    for(let item of data){
        console.log(item);
    }
    console.log(`fun3 start:${Date.now()-startTime}`);
})

输出结果:

fun1 start:0    end:2006
fun2 start:1    end:1005
fun3 start:2028

Promise.all适用于,在某几个异步函数执行完毕之后,再进行执行。
如上面代码所示,fun3是需要在fun1和fun2完成之后再执行的,并不关心fun1和fun2执行的先后顺序。
由于fun1执行需要2000ms,fun2需要1000ms,fun1和fun2同时执行,fun2先执行完,fun1后执行完。fun3开始执行时间=max(fun1执行时间,fun2执行时间)。

参考链接:
ES6中的Promise对象:http://es6.ruanyifeng.com/#docs/promise
bludbird参考文档:http://bluebirdjs.com/docs/api-reference.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值