Promise

Promise

解决异步调用,是一个数据容器,保存未来结果

1// then只有在resolve执行之后,才会执行 2promise.then(result=>{ 3 promise.then(res=>{ 4 .... 5 }) 6})
// then只有在resolve执行之后,才会执行 promise.then(result=>{ promise.then(res=>{ .... }) })

ajax

 1// 发送异步请求  2const xmlhttp = new XMLHttpRequest()  3  4// 连接服务器, true允许异步  5xmlhttp.open('GET', 'http://www.yyxx.org/data.php', true)  6xmlhttp.send('id=1')  7  8// 监听状态码  9xmlhttp.onreadystatechange = function(){ 10 // readyState表示xmlhttp加载过程 11 if(xmlhttp.status == 200 && xmlhttp.readyState == 4){ 12 const result = xmlhttp.responseText 13 // 格式化 14 const obj = JSON.parse(result) 15 }else{ 16 error('request failed') 17 } 18}
// 发送异步请求 const xmlhttp = new XMLHttpRequest() // 连接服务器, true允许异步 xmlhttp.open('GET', 'http://www.yyxx.org/data.php', true) xmlhttp.send('id=1') // 监听状态码 xmlhttp.onreadystatechange = function(){ // readyState表示xmlhttp加载过程 if(xmlhttp.status == 200 && xmlhttp.readyState == 4){ const result = xmlhttp.responseText // 格式化 const obj = JSON.parse(result) }else{ error('request failed') } }

 1function ajax(method='GET', url, data, async=true, success){  2 ....  3 // 格式化  4 const obj = JSON.parse(result)  5 success(obj)  6}  7  8ajax({  9 method:'GET', 10 url:'http://www.yyxx.org/data.php', 11 async:true, 12 data:'id=1', 13 success:fuction(msg){ 14 console.log(msg) 15 }, 16 error:function(error){ 17 } 18})
function ajax(method='GET', url, data, async=true, success){ .... // 格式化 const obj = JSON.parse(result) success(obj) } ajax({ method:'GET', url:'http://www.yyxx.org/data.php', async:true, data:'id=1', success:fuction(msg){ console.log(msg) }, error:function(error){ } })

缺陷

回调地狱,嵌套使用ajax来发送请求

 1ajax({  2 method:'GET',  3 url:'http://www.yyxx.org/data.php',  4 async:true,  5 data:'id=1',  6 success:fuction(msg){  7 ajax({  8 method:'GET',  9 url:'http://www.yyxx.org/data.php', 10 async:true, 11 data:'id=1', 12 success:fuction(msg){ 13 console.log(msg) 14 }, 15 error:function(error){ 16 } 17 }) 18 }, 19 error:function(error){ 20 } 21})
ajax({ method:'GET', url:'http://www.yyxx.org/data.php', async:true, data:'id=1', success:fuction(msg){ ajax({ method:'GET', url:'http://www.yyxx.org/data.php', async:true, data:'id=1', success:fuction(msg){ console.log(msg) }, error:function(error){ } }) }, error:function(error){ } })

axios

 1export function findDataByGetApi<T>(id: number): Promise<T> {  2 const baseUrl = 'http://www.yyxx.org/'  3 const url = 'data.php?id=' + id  4 const instance = axios.create({  5 baseURL: baseUrl,  6 timeout: 5000,  7 headers: {  8 "Content-type": "application/json"  9 } 10 }) 11 return new Promise((resolve, reject) => { 12 instance.get(url).then((res: AxiosResponse) => { 13 resolve(res.data) 14 }).catch((error: AxiosError) => { 15 console.log(`http error[${error}]`) 16 reject(new Error('http error')) 17 }); 18 }) 19} 20 21export function findDataByPostApi<T, K>(id: number, requestData: K): Promise<T> { 22 const baseUrl = 'http://www.yyxx.org/' 23 const url = 'data.php?id=' + id 24 const instance = axios.create({ 25 baseURL: baseUrl, 26 timeout: 2000, 27 headers: { 28 "Content-type": "application/json" 29 } 30 }) 31 return new Promise((resolve, reject) => { 32 instance.post(url, JSON.stringify(requestData)).then((res: AxiosResponse) => { 33 resolve(res.data) 34 }).catch((error: AxiosError) => { 35 console.log(`http error[${error}]`) 36 reject(new Error('http error')) 37 }); 38 }) 39}
export function findDataByGetApi<T>(id: number): Promise<T> { const baseUrl = 'http://www.yyxx.org/' const url = 'data.php?id=' + id const instance = axios.create({ baseURL: baseUrl, timeout: 5000, headers: { "Content-type": "application/json" } }) return new Promise((resolve, reject) => { instance.get(url).then((res: AxiosResponse) => { resolve(res.data) }).catch((error: AxiosError) => { console.log(`http error[${error}]`) reject(new Error('http error')) }); }) } export function findDataByPostApi<T, K>(id: number, requestData: K): Promise<T> { const baseUrl = 'http://www.yyxx.org/' const url = 'data.php?id=' + id const instance = axios.create({ baseURL: baseUrl, timeout: 2000, headers: { "Content-type": "application/json" } }) return new Promise((resolve, reject) => { instance.post(url, JSON.stringify(requestData)).then((res: AxiosResponse) => { resolve(res.data) }).catch((error: AxiosError) => { console.log(`http error[${error}]`) reject(new Error('http error')) }); }) }

Powered By 可尔物语

浙ICP备11005866号-12