为什么要用promise
1.指定回调函数的方式更加灵活:
旧的必须在启动异步任务前指定
promise:启动异步任务 =》 返回promise对象 =》 给promise对象绑定回调函数(甚至可以在异步任务结束后指定)
2.支持链式调用,可以解决异步回调地狱问题
什么是回调地狱?回调函数嵌套调用,外部回调函数异步执行的结果是嵌套的回调函数 执行的条件
第二个异步任务是以第一个异步任务为前提,第三个 异步任务是以第二个异步任务为前提
回调地狱的缺点? 不便于阅读 / 不便于异常处理
解决方案: promise链式调用
终极解决方案:async/await
//回调地狱 第一个异步任务 的结果 作为第二个异步任务
doSomething(function(result){
doSomething(function(result){
doSomething(function(result){
console.log("111");
},failureCallback)
},failureCallback)
},failureCallback)
//promise 没有回调函数嵌套,但还是有回调函数;纯同步写法用的async/await
//promise链式调用,可以解决异步回调地狱问题,
//异常传透,无论哪个 出错都会catch里的函数执行
//promise:返回一个新的promise对象
doSomething().then(function(result){
return doSomethingElse(result)
})
.then(function(newResult){
return doSomethingElse(newResult)
})
.then(function(finalResult){
return doSomethingElse(finalResult)
})
.catch(failureCallback)
async function request(){
try{
const result=await doSomething()
const newResult=await doSomethingElse(result)
const finalResult=await doSomethingElse(newResult)
console.log(finalResult);
}catch(error){
failureCallback(error);
}
}
还没有评论,来说两句吧...