今天遇到一个需求:做请求接口的封装,接口请求失败时,如无特殊处理则执行默认方法 defaultFunction (如弹窗提示),如有特殊处理则不执行默认方法。 如果用 callback 的写法很容易实现:
//封装方法
var ajax = function(option) {
$.ajax({
url: option.url,
fail: function() {
if(!option.fail || typeof option.fail != 'function') {
defaultFunction();
}
}
})
}
//特殊处理,不执行默认
ajax({
url: 'a.url',
fail: function() {
console.log('error');
}
})
//无特殊处理,执行默认
ajax({
url: 'a.url',
})
但是现在项目中的封装是基于 Promise 的,如下:
//封装方法
let p = (option) => {
return new Promise((resolve, reject) => {
$.ajax({
url: option.url,
fail: () => {
reject();
defaultFunction();
}
})
});
}
//调用
p({url: 'a.url'}).catch(() => {
//...
})
求教:基于 Promise 是否可以实现类似上面「在调用处决定是否执行默认方法」的写法?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.