javascriptPromise
Promise是一个ECMAScript6提供的类,目的是更加优雅地书写复杂的异步任务。当需要多次顺序执行异步操作的时候适合用Promise而不是传统回调函数
Promise构造函数只有一个参数(即起始函数),这个函数在构造之后会直接被异步运行。起始函数包含两个参数resolve和reject,它们都是函数,前者代表一切正常,后者是出现异常时所调用的
Promise类有.then().catch()和.finally()三个方法,这三个方法的参数都是一个函数,.then()可以将参数中的函数添加到当前Promise的正常执行序列,.catch()则是设定Promise的异常处理序列,.finally()是在Promise执行的最后一定会执行的序列。.then()传入的函数会按顺序依次执行,有任何异常都会直接跳到catch序列
比如:
newPromise(function(resolve,reject){ vara=0; varb=1; if(b==0)reject("Dividezero"); elseresolve(a/b); }).then(function(value){ console.log("a/b="+value); }).catch(function(err){ console.log(err); }).finally(function(){ console.log("End"); });
resolve()中可以放置一个参数用于向下一个then传递一个值,then中的函数也可以返回一个值传递给then。但是,如果then中返回的是一个Promise对象,那么下一个then将相当于对这个返回的Promise进行操作
reject()参数中一般会传递一个异常给之后的catch函数用于处理异常
resolve和reject的作用域只有起始函数,不包括then以及其他序列
resolve和reject并不能够使起始函数停止运行,别忘了使用return
异步函数
asyncfunction
比如:
functionprint(delay,message){ returnnewPromise(function(resolve,reject){ setTimeout(function(){ console.log(message); resolve(); },delay); }); } asyncfunctionasyncFunc(){ awaitprint(1000,"First"); awaitprint(4000,"Second"); awaitprint(3000,"Third"); } asyncFunc();
异步函数asyncfunction中可以使用await指令,await指令后必须跟着一个Promise,异步函数会在这个Promise运行中暂停,直到其运行结束再继续运行
异步函数实际上原理与Promise原生API的机制是一模一样的
处理异常用try-catch块实现
如果Promise有一个正常的返回值,await语句也会返回它