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语句也会返回它

posted @ 2022-05-08 21:57  树叶本子  阅读(28)  评论(0)    收藏  举报