promise.then链式调用实践运用的心得总结

  1. then 方法返回一个 Promise 对象,该对象可被用于链式调用
  2. 若传递一个匿名函数给 then, 如果返回一个参数,那么该参数将传入后续的方法链中(如下代码)
p1.then(()=>{return 1}).then((res)=>{console.log(res) // 1})

如果它返回一个 Promise,一个等价的 Promise 将暴露给后续的方法链(如下代码)。

// 调用 getList 后返回一个promise, 传入返回的 list 参数给后续的方法链条. 
getList(){
  return api.getList().then((list) => {
    return list
  })
}

// 1. getList 直接调用,后面接链式写法
getList().then(list => {console.log(list)})

// 2. getList 处于链式写法中间 (后一种存在嵌套结构,逻辑不如前者清晰)
p1
  .then(()=>{return getList()})
  .then(list => {console.log(list)})
等价于
p1
  .then(()=>{
     getList().then(list => {console.log(list)})
   })

实践一: 在方法内部可能无需异步操作, 但后面要接链式写法的情况下,用 Promise.resolve() 直接返回 promise 对象(适用于异步操作的前面同时存在同步和异步操作的情况)

     const checkHasExecuted = () => {
        // 已执行脚本,直接返回promise对象; 否则先执行脚本
        if (this.hasExecuted) return Promise.resolve()
        return this.executePythonScript()
      }
      checkHasExecuted()
        .then(() => {
          return this.getTempTableColumnList()
        })
        .then((columnList) => {
          saveAndClose(columnList)
        })
  1. Promise.all 用法:
      Promise.all([query1(), query2()])
        .then((res) => {
          // 都请求成功, 则进入 then 回调方法
          let data1 = res[0]?.data
          let data2 = res[1]?.data
        })
        .catch((error) => {
          // 其中任一一个失败, 则进入 catch 回调方法
          console.error(error)
        })
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值