用Promise进行快速异步代码原型
复杂的异步编程场景实现起来线路比较长,而且往往比较拖沓的。 我平时爱用的一个技巧是充分利用Promise提供的快捷方式快速把程序轮廓勾勒出来,简单的脚手架策略。 距离一个三步异步操作的快速勾勒:
Promise.resolve([ … ] /* 在这里用实验数据填充 /) .then(function() { return Promise.resolve([ … ] / 第二个步骤的实验数据填充 /; }) .then(function() { return Promise.resolve(… / 同样道理 */); }) .then(function() { 最后处理 });
脚手架的目的不是实现细节,而是勾勒出整个异步流程的脉络。 细节可以一步步明确,一步步替换掉每个Promise.resove(),层层推进,替换到最后一个Promise.resolve的时候,整个程序的设计和实现就高质量地完成了。
不是什么高大上的东西,但我觉得挺实用。
3 回复
下一个promise要用上一个的结果,是不是有点臃肿?这是我自己写的,感觉怪怪的,你帮我看看
let p1=()=>{
let p1_data;
return new Promise((resolve,reject)=>{
setTimeout(()=>{
p1_data=1;
resolve(p1_data)
},1000)
})
}
let p2=(value)=>{
return new Promise((resolve,reject)=>{
setTimeout(()=>{
value++;
resolve(value)
},2000)
})
}
let p3=(value)=>{
return new Promise((resolve,reject)=>{
setTimeout(()=>{
value++;
resolve(value)
},3000)
})
}
p1().then((value)=>{
return p2(value)
})
.then((value)=>{
return p3(value)
})
.then((value)=>{
console.log('终于等到你',value)
})
现在不是有async await了,感觉更直观更方便