Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
435 views
in Technique[技术] by (71.8m points)

使用promise封装的时候,使用了全局拦截,怎么针对个别请求重新拦截呢?

return new Promise((resolve, reject) => {
    wx.request({
        url: API_URL + url,
        success: function (res) {
            if (res.data.code == 200) {
                
            }
            else {
                reject(res.data.msg)
            }
        },
        fail: function (e) {
            reject('request fail')
        }
    })
}).catch(err => {
    console.warn('error for debugger')
})

如题,promise是不是每一个都要写一个catch,如果请求有几百个,是不是只能写几百个catch,有没有什么办法可以全局catch完之后,针对某一个请求写特定的catch?


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)
  • 根据业务逻辑需要,按返回的数据code来决定哪些需要全局拦截,那么全局忽略,开发给具体请求具体处理
  • 出入具体的参数,来决定是否需要全局拦截
var IGNOR_INTERCEPT_CODES=[300,400,500...];
function wx_request(url,autoHandleFlag=true){
    return new Promise((resolve, reject) => {
        wx.request({
            url: API_URL + url,
            success: function (res) {
                if (res.data.code == 200) {
                    resolve({
                        code:res.data.code,
                        data:res.data,
                        msg:'',
                    });
                }
                else {
                    if(!autoHandleFlag){
                        resolve({
                            code:res.data.code,
                            data:null,
                            msg:res.data.msg
                        });
                    }else{
                        if(IGNOR_INTERCEPT_CODES.indexOf(res.data.code)!==-1){
                            resolve({
                                code:res.data.code,
                                data:null,
                                msg:res.data.msg
                            });
                        }else{
                            reject(res.data.msg)
                        }
                    }
                    
                    
                }
            },
            fail: function (e) {

                if(!autoHandleFlag){
                    resolve({
                        code:-1,
                        data:null,
                        msg:e,
                    });
                }else{
                   // 此处处理系统级别的错误,也可以按消息类型决定是否直接reject还是resovle返回数据给调用方
                    reject('request fail')
                }
                
            }
        })
    }).catch(err => {
        console.warn('error for debugger')
    });
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...