我们知道在ajax中想要获取返回值,需要在success中添加回调方法,大大增加了前端代码的耦合度,同时调用起来显得不够优雅,下面咱们看看Promise类如何优雅的解决这个问题的
$.ajax 调用的模式如下:
$.ajax({
type: 'GET',
url: 'your-request-url',
headers: {
"Accept": "application/json;odata=verbose",
"Content-Type": "application/json;odata=verbose",
},
dataType: 'json',
success: function(data) {
//do something with data
},
error: function(data) {
console.log(data);
}
})
可以看到do something with data的逻辑耦合在了success的回调方法中,下面看看JavaScript中的Promise对象如何解决这个问题
func() {
return new Promise((resolve, reject) => {
$.ajax({
type: "GET",
url: "your request url",
headers: {
"Accept": "application/json;odata=verbose",
"Content-Type": "application/json;odata=verbose",
},
dataType: 'json',
success: function(data) {
resolve(data);
}),
error: function(data) {
reject(data);
}
});
}
这样定义之后,调用的时候直接如下:
func().then(data =>{
//do something with data
});
同时该方法还巧妙的解决了顺序执行的问题,do something with data 逻辑在func()调用结束之后再调用。