微信小程序关于async异步同步化后success和fail的优化问题

async a(){
await b()
await c()
await d()
},

b(){ wx.showModal({ titel: "成功1", success (res) {})}
c(){ wx.showModal({ titel: "成功2", success (res) {})}
d(){ wx.showModal({ titel: "成功2", success (res) {})}

a()

执行b,需要成功之后才可以执行c,如果失败就要返回错误,不往下执行
执行c,需要成功之后才可以执行d,如果失败就要返回错误,不往下执行
执行d,需要成功之后才可以执行下去,如果失败就要返回错误,不往下执行

请问需要怎么去改进?需要增加或者修改哪些代码?

Page({
  onLoad() {
    this.a()
  },
  async a() {
    try {
      await this.b()
      await this.c()
      await this.d()
    } catch (error) {
      wx.showToast({
        title: error.err,
        icon: 'none'
      })
    }
  },
  async b() {
    return new Promise((resolve, rejcet) => {
      wx.showModal({
        title: "B?",
        cancelText: "失败",
        confirmText: "成功",
        success: (res) => {
          if (res.confirm) resolve();
          else rejcet({ err: '点击了失败' })
        },
        fail: (err) => {
          rejcet({ err: err.errMsg })
        }
      })
    })
  },
  async c() {
    return new Promise((resolve, rejcet) => {
      wx.showModal({
        title: "C?",
        cancelText: "失败",
        confirmText: "成功",
        success: (res) => {
          if (res.confirm) resolve();
          else rejcet({ err: '点击了失败' })
        },
        fail: (err) => {
          rejcet({ err: err.errMsg })
        }
      })
    })
  },
  async d() {
    return new Promise((resolve, rejcet) => {
      wx.showModal({
        title: "D?",
        cancelText: "失败",
        confirmText: "成功",
        success: (res) => {
          if (res.confirm) resolve();
          else rejcet({ err: '点击了失败' })
        },
        fail: (err) => {
          rejcet({ err: err.errMsg })
        }
      })
    })
  }
})