用Promise进行快速异步代码原型
发布于 6 年前 作者 flamingtop 3110 次浏览 来自 分享

复杂的异步编程场景实现起来线路比较长,而且往往比较拖沓的。 我平时爱用的一个技巧是充分利用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了,感觉更直观更方便

回到顶部