猫史档案馆


【 Promise 】教学

用户:我爱Kitten我爱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

 

 


回复

上一页1 页 / 共 1下一页
我爱Kitten我爱Kitten

排版 被吞

点赞0


评论


我爱Kitten我爱Kitten

第二前面应该换行

点赞0


评论


我爱Kitten我爱Kitten

完蛋了!(排版被吞)

点赞0


评论


蓝矮爱乐蓝矮爱乐

az,那是执行失败,不是拒绝()

点赞1


评论


该账号已被封禁该账号已被封禁

介绍改成Promise是一种保证异步函数按序执行的方法多好()()

点赞0


评论


我爱Kitten我爱Kitten

ddd】

点赞1


评论


Ezra__Ezra__

链式调用那块是不是该说一下.then()也是会返回一个Promise的?

点赞0


评论


NomenNomen

嗷呜,稍微补充一点

new Promise((resolve, reject))

这里两个参数是自带的,如果需要调用这两个方法,就必须准确写上resolve(好滴!), reject(达咩!)两个参数

一般来说各位岛民使用waiter就够了,比如

const nomen = await asyncFunction()

这样还是比较省空间而且方便的

点赞0


评论


NomenNomen

又补充一句

waiter要在异步体里面用

async function(){
//waiter
}

不然这位控制台先生会呼一巴掌给在座的代码师

等等还有一点,相对于Promise,岛三的waiter是可以自动阻塞当前代码的,轻量效果上还是比Promise好的,但是在其他方面Promise更胜一筹

等等!还有一点,我最近发现岛三的语法中,async function会出现返回值变成promise的情况!

这个时候只要在有返回值的函数后面用then或者waiter就好了,如果没有返回值的异步函数被你用then调用了的话,这位控制台先生会呼一巴掌给在座的代码

很好理解,异步因为返回的是一个Promise Object,而Promise Object是包含then方法的,但是没有返回值的函数是不会返回Promise的!

点赞0


评论


我爱Kitten我爱Kitten

补充:

(async function(){//异步函数
     return 1;//返回'1'
});

这个函数返回[Object Promise]因为所有的async函数都会返回promise对象。

如果想获得最终的返回值如下

(async function(){//异步函数
     return 1;//返回'1'
}).then(value=>console.log(value));//输出'1'

点赞0


评论