promise和async/await都是处理异步请求
/** * 注释: *js中的同步、异步问题通常是指ajax回调: * 1)同步:同比调用,程序发出ajax调用后就暂停,到服务器有回应才继续 * 2)异步:异步调用,程序发出ajax调用后立即执行后面代码,服务器返回信息后会自动触发回调函数进行处理 * 3)优缺点:异步程序不会程序卡顿现象,同步用于需要立即获得结果并实时处理的情况 */
一、promise的基本用法:
//Promise对象,简单来说就是一个容器,里面保存着异步操作的最终完成 (或失败)及其结果值
1)基本语法:
let p = new Promise((resolve,reject)=>{ //.... resolve('success') }); p.then(result=>{ console.log(result) ; //success });
2)三个状态 : pending (执行中) 、success(成功) 、 rejected (失败)
3)链式调用:
let p = new Promise((resolve,reject)=>{ reject('error'); }); //Promise.prototype.catch用于指定Promise状态变为rejected时的回调函数,可以认为是.then的简写形势,返回值跟.then一样 p.cath(result=>{ console.log(result); })
二、async、await
async用于声明一个函数是异步的,而await可以认为是async wait的简写,等待一个异步方法执行完成。
/**
* Async/Await让 try/catch 可以同时处理同步和异步错误 * async,await : 将异步强行转换为同步处理,async/await是寄生于Promise的语法糖 */
三、错误捕获:
// 如果是reject状态,可以用try-catch捕捉 , await关键字只能用在aync定义的函数内 let p =new Promise((resolve,reject)=>{ setTimeout(()=>{ reject('error') },1000); }) async function demo(params){ try{ let result = await p; } catch(e) { consloe.log(e) } } demo();