回调地狱 promise asnc await处理异步过程

转载:https://www.jianshu.com/p/1b63a13c2701

 

回调地狱 promise asnc await处理异步过程

// 1.指定回调函数的方式更加灵活

// 旧的:必须在启动异步任务前指定

// promise:启动异步任务=>返回promise对象=>给对象绑定回调函数(可以在异步任务结束后指定)

 

// 2.支持链式调用,可以解决回调地狱问题

// 什么是回调地狱?回调函数嵌套调用,外部回调函数异步执行的结果是嵌套的回调函数执行的条件

// 回调地狱的缺点:不便于阅读/不便于异常处理

// 解决方案?promise链式调用

// 最终解决方案? async /await async=>promise对象  await=>then处理

 

// 成功的回调函数

function successCallback(result){

    console.log('文件1创建成功:'+result);

}

 

// 失败的回调函数

function failureCallback(error){

    console.log("文件2创建失败:"+error);

}

 

//1. 使用纯回调函数(先执行回调再执行异步函数)

createFileAsync(successCallback,failureCallback)


 

// 2.使用Promise()不用考虑回调函数是否在异步函数执行前还是执行后进行执行

const promise=createFileAsync();

setTimeout(()=>{

promise.then(successCallback,failureCallback)

},3000)


 

// 3.回调地狱

doSomething(function(result){

    doSomethingEls(result,function(newResult){

        doThirdThing(newResult,function(finalResult){

            console.log('Got the final result:'+finalResult)    

        },failureCallback)

    },failureCallback)

},failureCallback)

 

// 4.使用promise的链式调用解决回调地狱

 

doSomething().then(function(result){

    return doSomethingEls(result)

})

.then(function(newResult){

    return doThirdThing(newResult)

})

.then(function(finalResult){

    console.log('Got the final result:'+finalResult)    

})

 

// async/await:回调地狱的终极解决方案

async function request(){

    try{

        const result=await doSomething()

        const newResult=await doSomethingEls(result)

        const finalResult=await doThirdThing(newResult)

        console.log('Got the final result:'+finalResult)    

    }catch(error){

        failureCallback(error)

    }

}