网站首页 > 博客文章 正文
好程序员web前端培训JavaScript学习笔记Promise,promise 是一个 ES6 的语法
Promise表示承诺的意思,它在语法上解决了传统的多层回调嵌套问题
回调函数
· 什么是回调函数?
· 就是把函数 A 当作参数传递到 函数 B 中
· 在函数 B 中以行参的方式进行调用
function a(cb) {
cb()}?function b() {
console.log('我是函数 b')}?a(b)
· 为什么需要回调函数
· 当我们执行一个异步的行为的时候,我们需要在一个异步行为执行完毕之后做一些事情
· 那么,我们是没有办法提前预知这个异步行为是什么时候完成的
· 我们就只能以回调函数的形式来进行
一个典型的定时器
setTimeout(function(){
console.log("回调函数执行了")}, 2000)
回调地狱
· 当一个回调函数嵌套一个回调函数的时候
· 就会出现一个嵌套结构
· 当嵌套的多了就会出现回调地狱的情况
· 比如我们发送三个 ajax 请求
· 第一个正常发送
· 第二个请求需要第一个请求的结果中的某一个值作为参数
· 第三个请求需要第二个请求的结果中的某一个值作为参数
ajax({
url: '我是第一个请求',
success (res) {
// 现在发送第二个请求 ajax({
url: '我是第二个请求',
data: { a: res.a, b: res.b },
success (res2) {
// 进行第三个请求 ajax({
url: '我是第三个请求',
data: { a: res2.a, b: res2.b },
success (res3) {
console.log(res3)
}
})
}
})
}})
· 回调地狱,其实就是回调函数嵌套过多导致的
· 当代码成为这个结构以后,已经没有维护的可能了
· 所以我们要把代码写的更加的艺术一些
PROMISE
· 为了解决回调地狱
· 我们就要使用 promise 语法
· 语法:
new Promise(function (resolve, reject) {
// resolve 表示成功的回调 // reject 表示失败的回调}).then(function (res) {
// 成功的函数}).catch(function (err) {
// 失败的函数})
· promise 就是一个语法
· 我们的每一个异步事件,在执行的时候
· 都会有三个状态,执行中 / 成功 / 失败
· 因为它包含了成功的回调函数
· 所以我们就可以使用 promise 来解决多个 ajax 发送的问题
new Promise(function (resolve, reject) {
ajax({
url: '第一个请求',
success (res) {
resolve(res)
}
})}).then(function (res) {
// 准备发送第二个请求 return new Promise(function (resolve, reject) {
ajax({
url: '第二个请求',
data: { a: res.a, b: res.b },
success (res) {
resolve(res)
}
})
})}).then(function (res) {
ajax({
url: '第三个请求',
data: { a: res.a, b: res.b },
success (res) {
console.log(res)
}
})})
· 这个时候,我们的代码已经改观了很多了
· 基本已经可以维护了
· 但是对于一个程序员来说,这个样子是不够的
· 我们还需要更加的简化代码
· 所以我们就需要用到一个 es7 的语法了
· 叫做 async/await
ASYNC/AWAIT
· async/await 是一个 es7 的语法
· 这个语法是 回调地狱的终极解决方案
· 语法:
async function fn() {
const res = await promise对象}
· 这个是一个特殊的函数方式
· 可以 await 一个 promise 对象
· 可以把异步代码写的看起来像同步代码
· 只要是一个 promiser 对象,那么我们就可以使用 async/await 来书写
async function fn() {
const res = new Promise(function (resolve, reject) {
ajax({
url: '第一个地址',
success (res) {
resolve(res)
}
})
})
// res 就可以得到请求的结果 const res2 = new Promise(function (resolve, reject) {
ajax({
url: '第二个地址',
data: { a: res.a, b: res.b },
success (res) {
resolve(res)
}
})
})
const res3 = new Promise(function (resolve, reject) {
ajax({
url: '第三个地址',
data: { a: res2.a, b: res2.b },
success (res) {
resolve(res)
}
})
})
// res3 就是我们要的结果 console.log(res3)}
· 这样的异步代码写的就看起来像一个同步代码了
猜你喜欢
- 2024-11-09 ES6 fetch()方法详解(es6find方法)
- 2024-11-09 ES6新增语法(七)——async...await
- 2024-11-09 手把手一行一行代码教你手写Promise
- 2024-11-09 把 Node.js 中的回调转换为 Promise
- 2024-11-09 BAT前端经典面试问题 es6之promise原理,promise应用场景
- 2024-11-09 ES6 完全使用手册附加案例实战讲解
- 2024-11-09 ES6 的常用新特性(es6特性及使用场景)
- 2024-11-09 Es6基础语法(es6语法重点整理)
- 2024-11-09 「新手向」 Promise课程笔记整理(promise yo)
- 2024-11-09 ES6中的Promise.resolve()到底有何作用呢
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)