回调地狱问题
function queryData(url){
var p = new Promise(function(resolve,reject){
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(){
if(xhr.readyState != 4)return;
if(xhr.status == 200){
//正常情况
resolve(xhr.responseText);
}else{
//异常情况
reject(‘服务器故障!‘);
}
};
xhr.open(‘get‘,url);
xhr.send(null);
});
return p;
}
//调用
queryData("http://localhost:8080/test/all")
.then(function(data){
//正常情况
console.log(data);
},function(info){
//异常情况
console.log(info);
});
解决回调地狱问题
queryData(url1)
.then(function(data){
return queryData(url2);
})
.then(function(data){
return queryData(url3);
})
.then(function(data){
return queryData(url4);
});
then函数返回值:
实例方法:
对象方法:
Promise.all([p1,p2,p3]).then(result=> {
console.log(result)
});
Promise.race([p1,p2,p3]).then(result=> {
console.log(result)
});
fetch(url).then(fn2)
.then(fn3)
...
.catch(fn)
demo
fetch(‘http://localhost:8080/test/all‘).then(result=> {
//通过fetch的text()方法返回一个Promise对象在下一个then中获取返回数据
return result.text();
}).then(data =>{
console.log(data);
})
常用配置项:
fetch(url,{
method: ‘post‘,
body: JSON.stringify({
uname: ‘hhh‘,
pwd: ‘123456‘
}),
headers: {
‘Content-Type‘ : ‘application/json‘
}
}).then(fn2)
.then(fn3)
...
.catch(fn)
格式
基于Promise用于浏览器和node.js 的HTTP客户端
axios.get(url,params)
.then(res => {
console.log(res.data)
})
.catch(err => {
console.error(err);
})
demo
axios.get(‘http://localhost:8080/test/all‘)
.then(res => {
console.log(res.data)
})
.catch(err => {
console.error(err);
})
主要属性
超时时间
axios.defaults.timeout=3000;
默认(基本)地址
axios.defaults.baseURL=‘http://localhost:8080/api‘
设置请求头
axios.defaults.headers[‘myToken‘] = ‘fsa2er3dst4‘;
基本用法
axios.interceptors.request.use(config => {
// 请求前做一些事情
return config;
},error => {
// 请求出错做的事情
return Promise.reject(error);
});
基本用法
axios.interceptors.response.use(response => {
// 获得响应时做一些数据
return response;
},error => {
// 响应出错的时候做一些事情
return Promise.reject(error);
});
async function queryData() {
var ret = await axios.get(‘http://localhost:8080/test/all‘);
return ret;
}
queryData().then(ret => {
console.log(ret.data)
})
async function queryData() {
var info = await axios.get(‘http://localhost:8080/test/all‘);
var ret = await axios.get(‘http://localhost:8080/test/query?id=‘+ info.data[0].id);
return ret;
}
queryData().then(ret => {
console.log(ret.data)
})
原文:https://www.cnblogs.com/erkye/p/12825782.html