如何继承promise,并为resolve和reject添加新的方法

因为正常调用会需要重复的写大量的页面提示

Api().then(()=>{
        showLoading()
        
        dosomething()
    }).catch(()=>{
        showfail()
        
        dosomething()
    })

想实现

class mPromise extends Promise{
    //...

}

之后把原来 return new Promise 改成 return new mPromise

就可以在 thencatch 的逻辑里不用写 showLoading()showfail()

请问继承里该怎么写呢?

或者如果用装饰者模式又怎么写呢?

阅读 5.8k
3 个回答

这个是伪需求

要实现这样的效果根本不需要这么复杂!

下面这一个简短的代码就可以实现。

// 定义一个基api
const baseApi = (url, options) => Api(url, options).then(showLoading).catch(err => {
    showFail(err)
    throw err
})
// 使用   
baseApi('你的url', {}).then(dosomething).catch(dosomething) 

希望我的回答可以帮助到你,谢谢~

类似于实现 Promise.finally

Promise.prototype.finally = function (callback) {
  let P = this.constructor
  return this.then(
    value  => P.resolve(callback()).then(() => value),
    reason => P.resolve(callback()).then(() => { throw reason })
  )
}

@说好的一血呢 的答案挺有意思,我来做个翻译,哈哈哈,请大佬不要见怪,因为对Promise chain自己也不熟。所以作如下尝试:
请看如下图

clipboard.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题