百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 优雅编程 > 正文

好程序员web前端培训JavaScript学习笔记Promise

sinye56 2024-10-27 14:11 16 浏览 0 评论

  好程序员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)}

· 这样的异步代码写的就看起来像一个同步代码了

相关推荐

6个接私活的网站,你有技术就有钱

如果觉得有帮助,还请大家帮忙多多转发,点个关注作者:发哥链接:GitHubDaily本篇文章会向大家推荐国内外几个接外包比较靠谱的平台,主旨是贵精不贵多。因此,像「猪x戒」这种会让程序员自贬身价,扰乱...

Java开源可商用的CMS建站系统_java建站源码

Java研发的CMS内容管理系统具有许多优势和特点,包括以下几个方面:跨平台性:Java是一种跨平台的编程语言,可以在不同的操作系统上运行,包括Windows、Linux、Mac等。这意味着Java...

SEO新手建站必看"干货"优质空间和功能选择技巧!

一.空间的分类服务器:远程的高级大型计算机。vps:虚拟服务器。虚拟空间:也称虚拟主机云主机:是在一组集群主机上虚拟出多个类似独立主机的部分,集群中每个主机上都有云主机的一个镜像,从而大大提高了虚拟主...

千字长文教你使用 宝塔面板 快速搭建网站

本文将教大家使用宝塔面板快速搭建网站,云服务器购买以及域名注册部分请自行上网搜索了解,亦可留言联系小编进行咨询。如果是和下方一样本地搭建演示的话,则不需要付费购买域名和主机。宝塔面板的是...

BlueHost香港虚拟主机建站的5个优点

应该是从2006年左右开始,如果我们建站选择国内的主机需要备案手续,而且比较繁琐,且根据各地的不同政策还需要到接入点拍照登记个人信息等,一来比较繁琐,二来我们担心万一网站可能存在的信息问题导致不必要的...

10款好用的Linux服务器网站管理面板推荐

如今在建站时,很多人都会使用管理面板来辅助建站,因为相对于手动安装软件,面板更加简单而且高效,即使新手也能很快学会搭建网站,在本文中我们来推荐几款好用的网站管理面板宝塔面板宝塔面板是一款简单好用的网站...

小白拥有一台云服务器到底能干些什么?成就感爆棚的简单方案!

?云服务器是什么?云服务器(比如阿里云、腾讯云等)是提供给用户的一种虚拟服务器资源,你可以把它看作一台“rent的电脑”,只需要支付少量费用就可以拥有一个功能强大的网络设备。对于小白来说,拥有一...

苹果CMS,苹果CMS采集插件,苹果CMS快速建站(图文教程)

苹果CMS,有着强大的管理功能,管理后台界面大方、操作简单、功能齐全、模块众多、双端管理。苹果CMS加上丰富的系统标签,系统内置了丰富的cms标签并支持thinkphp框架标签完美融合,可以调取系统内...

新手搭建网站、小程序、APP等系统,如何选择服务器?

今天和小蔡和大家说说,新手搭建网站,如何选择服务器?废话不多说,直接来干货。服务器是存放网站源代码的容器,也是运行网站程序的工具,所以是不可或缺的。新手刚接触搭建网站,若不知道怎么去选择一台适合自己...

在海外VPS服务器(Hostinger)上配置宝塔面板的操作步骤

不得不说,宝塔面板是真的好用啊~用上就放不下了,一些海外的免费开源的服务器集成面板(比如CloudPanel)我也用了,不喜欢,真的不如宝塔面板方便耐用。今天聊一下在海外服务器(也包括国内服务器,没有...

干货盘点:每个wordpress站长都推荐完成的60个任务清单

构建和运营wordpress网站包含了很多重要任务,遗漏哪一方面都可能造成或大或小的不良后果,因此我们特别整理了这个任务清单,为你查漏补缺,希望能对您现在运营或者即将开始构建的wordpress网站有...

为什么站长喜欢选择BlueHost主机建站

BlueHost正式成立于2003年,从事主机(虚拟主机)业务至今已经将近十余年,无论从口碑还是用户的评价,我们基本很少看到关于Bluehost主机产品和商家负面的评论信息。从2014年开始,Blue...

自助建站时代来临 半小时成建站达人

“H5”意为第五代HTML,即第五代网页编写语言。自从1991年第一代HTML开始研发以来,网页编写、网站建设一直都属于高端技术行业,网站建设人员都是一些专业型人才,这也意味着网站的建设和维护都需要不...

现代化、开源的 Linux 服务器运维管理面板

1Panel是一个现代化、开源的Linux服务器运维管理面板。1Panel的功能和优势包括:快速建站:深度集成Wordpress和Halo,域名绑定、SSL证书配置等一键搞定;高效管理...

[1Panel]开源,现代化,新一代的 Linux 服务器运维管理面板

测评介绍本期测评试用一下1Panel这款面板。1Panel是国内飞致云旗下开源产品。整个界面简洁清爽,后端使用GO开发,前端使用VUE的Element-Plus作为UI框架,整个面板的管理都是基于do...

取消回复欢迎 发表评论: