回调函数方式
缺点:回调地狱、异步并发控制困难
function interview(cb){
setTimeout(()=>{
if(Math.random()<0.6){
cb(null);
}else{
cb(-1)
}
},10)
}
let count = 0;
process.stdin.on('data',e=>{
//面试一家公司
interview(function(res){
if(res){
console.log('fail-one-1')
return
}
count++;
if(count===2){
console.log('两家公司都通过了')
count = 0
}
interview(function(res){
if(res){
console.log('fail-one-2')
return
}
interview(function(res){
if(res){
console.log('fail-one-3')
return
}
console.log('smile-one')
})
})
})
//面试第二家公司
interview(function(res){
if(res){
console.log('fail-two-1')
return
}
count++;
if(count===2){
console.log('两家公司都通过了')
count = 0
}
})
})
Promise
function interviewPromise(name){
return new Promise((resolve,reject)=>{
setTimeout(()=>{
if(Math.random()<0.6){
resolve(name+',success')
}else{
reject(name+',fail')
}
},500)
})
}
process.stdin.on('data',e=>{
//解决回调地狱
interviewPromise().then(res=>{
console.log(111,res)
interviewPromise().then(res=>{
console.log(222,res)
interviewPromise().then(res=>{
console.log(333,res)
}).catch(err=>{
console.log('3 fail')
})
}).catch(err=>{
console.log('2 fail')
})
}).catch(err=>{
console.log('1 fail')
});
//解决异步并发
Promise.all([interviewPromise('a'),interviewPromise('b')]).then(
results=>{
console.log(results)
}
).catch(err=>{
console.log(err);
})
})
Async / Await
网友评论