异步请求响应回调的4种方式
异步请求响应回调的4种方式
◆ 1. callback (ES3)
◆ 2. Promise (ES6)
◆ 3. Generator (ES6)
◆ 4. Async (ES7)
使用最多的callback回调方式
function ajax_get_callback(param,callback){ setTimeout(() => { let res = param + 100; callback(res); }, 1000); } ajax_get_callback(10,(res)=>{ console.log(res); });
Promise对象
function ajax_get_promise(param){ return new Promise((resolve,reject)=>{ setTimeout(() => { let res = param + 100; resolve(res); }, 2000); }); } ajax_get_promise(20).then((res)=>{ console.log(res); });
Generator 星号函数
function* ajax_get_generator(param){ let res = yield ajax_get_generator_request(param); console.log(res); } function ajax_get_generator_request(param){ setTimeout(()=>{ let res = param + 100; gener.next(res); },3000); } var gener = ajax_get_generator(30); gener.next();
Async 理想方式
function ajax_get_async_request(param){ return new Promise((resolve,reject)=>{ setTimeout(()=>{ let res = param + 100; resolve(res); },4000) }); } async function ajax_get_async(param){ let res = await ajax_get_async_request(param); console.log(res); } ajax_get_async(40);
完整代码:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title> </head> <body> <script> /* 异步请求响应回调的几种方法 1. callback (ES3) 2. Promise (ES6) 3. Generator (ES6) 4. Async (ES7) */ // 1. 古老经典的callback function ajax_get_callback(param,callback){ setTimeout(() => { let res = param + 100; callback(res); }, 1000); } ajax_get_callback(10,(res)=>{ console.log(res); }); // 2. Promise对象 function ajax_get_promise(param){ return new Promise((resolve,reject)=>{ setTimeout(() => { let res = param + 100; resolve(res); }, 2000); }); } ajax_get_promise(20).then((res)=>{ console.log(res); }); // 3. Generator 星号函数 function* ajax_get_generator(param){ let res = yield ajax_get_generator_request(param); console.log(res); } function ajax_get_generator_request(param){ setTimeout(()=>{ let res = param + 100; gener.next(res); },3000); } var gener = ajax_get_generator(30); gener.next(); //4. Async 理想方式 function ajax_get_async_request(param){ return new Promise((resolve,reject)=>{ setTimeout(()=>{ let res = param + 100; resolve(res); },4000) }); } async function ajax_get_async(param){ let res = await ajax_get_async_request(param); console.log(res); } ajax_get_async(40); </script> </body> </html>
参考文献:
Promise https://www.liaoxuefeng.com/wiki/1022910821149312/1023024413276544
Generator yield https://www.liaoxuefeng.com/wiki/1022910821149312/1023024381818112
async await https://www.jianshu.com/p/ffa5cbe9ab29
2019-05-20 15:08:17
2191
0
参与讨论