Promise主要处理异步操作,确认异步操作完成再执行后面的语句。
js通常是单线程的,常用的异步操作有:
ajax
请求- io操作(文件读取)
- 定时器
异步操作的原理:执行到需要的异步操作,会开始执行异步操作,不等执行完直接开始执行操作后面的语句,等语句执行完全再去看异步操作是否执行完成,完成就返回完成,没有就继续执行异步。
-
常用的异步请求操作
const promise = new Promise(function(resolve, reject) {
// ... 请求代码
if (/* 异步操作成功 */){
resolve(value);
} else {
reject(error);
}
});
复制代码
-
then/catch
then
为Promise
执行成功的语句
promise.then(function(res){});
复制代码
catch
为Promise
执行失败的语句
promise.catch(function(err){});
复制代码
常规用法
promise.then(function(res){
}).catch(function(err){
});
复制代码
then
滥用的话也是很恶心的,不断的then下去。所以出了一个终极解决方案。
-
async/await
async/await
是then/catch
的完美版。作用与then/catch
相同,只是用法上的区别。
每遇到一个await
都会先返回,再往下执行。变成了同步操作!
async f1(){
const res = await promise;
}
复制代码
可以使用try/catch
监听Promise
返回状态,try
为成功,catch
失败
async f1() {
try{
const res = await promise;
}catch(err){
console.log(err)
}
}
复制代码