用户:
我爱Kitten查看:12 回复:10 评论:12 创建时间:2022-07-14T11:59:50
目录
1.什么是Promise
2.构造一个Promise
3.Promise的链式调用
4.代码实例
一、什么是Promise
Promise用专业的话来说就是异步函数的同步管理。这句话是什么意思呢?简单来说异步函数在执行的时候运行顺序不确定,即程序可能不按你写的代码顺序来做为执行顺序;而同步函数则不同它按照你写的代码顺序来执行。而 Promise则是将“异步”化为了同步,是的 Promise对于异步的管理方式像同步一样,加强了程序的可操控性。 二、构造一个Promise 实例:new Promise((resolve, reject)=>{
//Promise要执行的任务
})
Promise分为三种状态,分别是:
1.未执行
2.已兑现
3.已拒绝
resolve是指已兑现。
而reject则指已拒绝。
未执行是指Promise还没有开始运行。
Promise的各种模式完全是由程序员自己判断的,在Promise内部,可以使用判断语句进行返回状态即resolve和reject。
三、Promise的链式调用
Promise有三个方法,分别是:then、catch和finally。
then是指如果Promise的状态为已兑现。
代码实例:
new Promise((resolve, reject)=>{
//Promise要执行的任务
}).then((aa)=>{//如果兑现
//要执行的任务
})
注意:只有Promise的第一个then才能接收到来自Promise的返回值,而其它的则需要上一个then提供的返回值,如果不这样做,默认参数为undefined。 catch是指捕获异常,即
Promise的状态处于已拒绝。
代码实例:
new Promise((resolve, reject) => {
//Promise要执行的任务
}).then((aa) => {//如果兑现
//要执行的任务
}).catch((bb) => {//如果拒绝
//要执行的任务
})
而
finally方法是指不管怎样都在最后执行。 代码实例:
new Promise((resolve, reject) => {
//Promise要执行的任务
}).then((aa) => {//如果兑现
//要执行的任务
}).catch((bb) => {//如果拒绝
//要执行的任务
}).finally(() => {//无条件执行(最后)
//要执行的任务
})
四、代码实例
本期教程代码实例如下:
console.clear();//控制台清零
//一个完整的简单的Promise代码实例
const e = new Promise((resolve, reject) => {//构造Promise
let a = Math.random() < 0.5 ? true : false;//条件表达式
if (a) {
resolve(a);//兑现
}
else {
reject(a);//拒绝
}
})
e.then((a1) => {//如果兑现
console.log(`Your Promise is ${String(a1)} !`);//输出兑现
return a1;
}).then((a2) => {
console.log(`Your Promise is ${String(a2)},too !`);//再次输出兑现
}).catch(() => {//如果拒绝
throw ('Your Promise is miss !');//输出拒绝
}).finally(() => {
console.log("I'm your Promise's finally !");//最后都输出
})
本期教程难免会有些错误,如有错误或建议请您在评论区指出,如有遗漏请指出。谢谢!
THE
END
Nomen嗷呜,稍微补充一点
new Promise((resolve, reject))
这里两个参数是自带的,如果需要调用这两个方法,就必须准确写上resolve(好滴!), reject(达咩!)两个参数
一般来说各位岛民使用waiter就够了,比如
const nomen = await asyncFunction()
这样还是比较省空间而且方便的
点赞0
评论
Nomen又补充一句
waiter要在异步体里面用
async function(){
//waiter
}
不然这位控制台先生会呼一巴掌给在座的代码师
等等还有一点,相对于Promise,岛三的waiter是可以自动阻塞当前代码的,轻量效果上还是比Promise好的,但是在其他方面Promise更胜一筹
等等!还有一点,我最近发现岛三的语法中,async function会出现返回值变成promise的情况!
这个时候只要在有返回值的函数后面用then或者waiter就好了,如果没有返回值的异步函数被你用then调用了的话,这位控制台先生会呼一巴掌给在座的代码
很好理解,异步因为返回的是一个Promise Object,而Promise Object是包含then方法的,但是没有返回值的函数是不会返回Promise的!
点赞0
评论
补充:
(async function(){//异步函数
return 1;//返回'1'
});
这个函数返回[Object Promise]因为所有的async函数都会返回promise对象。
如果想获得最终的返回值如下
(async function(){//异步函数
return 1;//返回'1'
}).then(value=>console.log(value));//输出'1'点赞0
评论