使用promise解决回调地狱_「每日一题」Promise 是什么?

window.Promise 已经是 JS 的一个内置对象了。

1. Promise 有规格文档吗?

2. 你一般如何使用 Promise。

-----------

目前的 Promise 都遵循 Promises/A+ 规范。

英文规范:https://promisesaplus.com/

中文翻译:图灵社区 : 阅读 : 【翻译】Promises/A+规范

看完规范你可以了解 Promise 的全貌,本文主要讲讲 Promise 的用途。

Promise 之前的时代——回调时代

假设我们用 getUser 来说去用户数据,它接收两个回调 sucessCallback 和 errorCallback:

function getUser(successCallback, errorCallback){$.ajax({url:'/user',success: function(response){successCallback(response)},error: function(xhr){errorCallback(xhr)  }})
}

看起来还不算复杂。

如果我们获取用户数据之后还要获取分组数组、分组详情等,代码就会是这样:

getUser(function(response){getGroup(response.id, function(group){getDetails(groupd.id, function(details){console.log(details)},function(){alert('获取分组详情失败')})}, function(){alert('获取分组失败')})}, function(){alert('获取用户信息失败')
})

三层回调,如果再多一点嵌套,就是「回调地狱」了。

Promise 来了

Promise 的思路呢,就是 getUser 返回一个对象,你往这个对象上挂回调:

var promise = getUser()
promise.then(successCallback, errorCallback)

当用户信息加载完毕,successCallback 和 errorCallback 之一就会被执行。

把上面两句话合并成一句就是这样的:

getUser().then(successCallback, errorCallback)

如果你想在用户信息获取结束后做更多事,可以继续 .then:

getUser().then(success1).then(success2).then(success3)

请求成功后,会依次执行 success1、success2 和 success3。

如果要获取分组信息:

getUser().then(function(response){getGroup(response.id).then(function(group){getDetails(group.id).then(function(){},error3)},error2)
}, error1)

这种 Promise 写法跟前面的回调看起来其实变化不大。

真的,Promise 并不能消灭回调地狱,但是它可以使回调变得可控。你对比下面两个写法就知道了。

getGroup(response.id, success2, error2)getGroup(response.id).then(success2, error2)

用 Promise 之前,你不能确定 success2 是第几个参数;

用 Promise 之后,所有的回调都是

.then(success, error) 

这样的形式。

以上是 Promise 的简介,想完整了解 Promise,请参考下面的自学链接。

Promise对象 -- JavaScript 标准参考教程(alpha)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/434361.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

应用css div进行页面布局设计,利用CSS与DIV进行页面布局.ppt

《利用CSS与DIV进行页面布局.ppt》由会员分享,可在线阅读,更多相关《利用CSS与DIV进行页面布局.ppt(6页珍藏版)》请在人人文库网上搜索。1、利用CSS与DIV进行页面布局,学习目标:,理解CSSDIV网页布局的含义掌握网页结构的规划掌握CSS样式的创建…

【原】winform高效导出Excel带格式设置

参考网上的方法修改,1000条记录导出只要3S(1GRDM,C2.8CPU).1.项目添加excel对象类库的引用,Microsoft Excel 11.0 object library(不同版本的Excel,类库不同,这是2003的) 2.代码1//-…

vscode 逗号不换行_来自一个插件的疯狂夸赞,VS Code「彩虹屁」插件问世,网友:我想要郭德纲版...

听说有人开发了「虚拟程序员鼓励师」,安装使用后的我疯狂捶墙,导致我家变成了单间。机器之心报道,机器之心编辑部。你可能从未想过,会有这么一个人:对你写的每一行代码都不吝夸赞,知道你什么时候想骂人&…

Asterisk拨号方案中变量的应用

在拨号方案中使用变量可以减少打字、增加清晰度,也有助于在拨号方案中加入逻辑. 这里的变量有全局变量,通道变量和环境变量。 1.全局变量 全局变量应该在extensions.conf文件的开始利用[globals]这个context定义或利用 SetGlobalVar()应用.如: [globals] 80000Zap/1或 [inter…

电压源和电流的关联参考方向_结点电压法解题系列之四:电流源支路

利用结点电压法求解时,有的结点之间连接的是电流源支路。如图1所示电路中,结点2与参考结点4之间连接的是5A电流源。对结点2列写标准形式KCL,或直接利用KCL列出结点电压方程,都很容易,也不易出错。只需要注意&#xff1…

狼人杀服务器紧急维护中,狼人杀最可怕的武器是那张嘴?禁言长老:你已被管理员禁言一天!...

语言的能力有多强?不论是用来攻击对手,或是讨好他人,讽刺或是欺骗,语言有着神秘的力量,仿佛能够颠倒黑白。对于那些"口吐芬芳"的人,更是恨不得在他嘴上贴个封条,让他好好安静一会。相…

炎炎夏日需要一个清凉的地 - 自制水冷系统(十一 指尖的思绪之程序篇)

前段时间接手了一个项目,所以DIY的进程有些停滞。实际编写的程序并没有多长时间,得益于Keil这个强大的IDE。能在第一次做51开发的时候,如此顺利的完成代码。不多说废话了,说明下代码的具体思路。具体思路根据(八 系统设…

wordpress 后台慢_建站经验-wordpress用户注册收不到验证邮件

背景我的一个博客http://axuretop.com,已经在后台开放注册了,注册用户默认为“订阅者”。一旦发布新的文章,会订阅邮件给用户。后台有300多个订阅用户,但是发现评论文章的很少,严重怀疑他们无法订阅我的文章&#xff0…

SIP.conf的常用参数配置

sip.conf Sip.conf 用于配置SIP通道。 [1005]------------------------------------------------------ 拨号方案实例 username1005----------------------------------------- 用户名typefriend----------------------------------------------- 类型,友好secret…

ai字体行间距怎么调整_字体基础知识(一)

本期教程主要讲解字体基础知识:字体、字号、字形、字重、行高、行距、字间距、字偶间距。本文所用软件为Microsoft PowerPoint 2013。1 字体文字的风格样式,就是我们平时常说的黑体、宋体、楷体、Segoe UI Black、Courier New、Consolas。如下图所示&…

免费的crm系统部署在自己的服务器,crm系统本地部署与云端部署的区别

CRM系统的部署方式通常有三种模式,分别是:本地部署、云端部署、公有云部署等三种模式。通常企业在选择的部署方式是本地部署与云端部署。那么他们部署方式得区别是什么?本地部署CRM系统本地部署的CRM软件:是意味着保存在企业自身的服务器中。…

gitee怎么仓库间传文件_实现一个简单的基于码云(Gitee) 的 Storage

实现一个简单的基于码云(Gitee) 的 StorageIntro上次在 asp.net core 从单机到集群 一文中提到存储还不支持分布式,并立了一个 flag基于 github 或者 开源中国的码云实现一个 storage于是这两天就来填坑了。。实现了一个简单的基于开源中国的码云的 storage准备工作…

extensions.conf的常用参数配置

extensions.conf 拨号方案配置文件,下面是一个简单的拨号方案,通过此处对拨号方案有一个简单的了解。 [from-sql]-----------对应sip配置文件中的context,由此关联执行相应的拨号方案。 exten > 111,1,Answer() -----拨打111的第一步操作&…

载波聚合或双连接的方式进行_智能电表常用远程抄表方式,您想知道吗?--老兵聊电之...

智能电表的远程抄表方式有多种方式,但老王更喜欢以下几种抄表方式,希望您能接受。一、智能电表的工作原理1.智能电表主要是由电子元器件构成,其工作原理是先通过对用户供电电压和电流的实时采样,再采用专用的电能表集成电路&#…

搞个服务器安装黑群晖系统,牛人闲置电脑大改造!超低成本组建家用黑群晖NAS...

一、前言:大家好,俺又来了。这篇原创很早就在构思怎么写了,因为确实作为一个数码爱好者来说,当得知有 群晖 威联通 这种NAS 的东西存在的时候,就忍不住想体验体验。但是奈何自己的资金不够,想一想&#xff…

立体旋转查看图片

声明:如果程序有问题,请各位大虾多多指点,谢谢。 基于psoft.js制作的一款立体旋转查看图片应用 1.可以通过鼠标滑动来操作图片的旋转,可以向右,向左拖动 a。向左滑动 b。向右滑动 c。向左转到一下 2.代码实现&#xff…

max file descriptors_年轻族的战场!宋MAX强势对比嘉际

随着社会的发展,人们对于汽车的要求也是越来越高,各大厂商为了吸引消费者的注意纷纷对旗下的车进行了改款,今天就带大家看看宋MAX对比嘉际外观:指标名称宋MAX嘉际长[mm]47104706宽[mm]18101909高[mm]16801690轴距[mm]27852805整备…

asterisk架构

从架构的角度看来,Asterisk是由许多不同的模块组成的。在设计基于Asterisk的系统时,这种模块化的特性,提供了几乎无限的灵活必。作为Asterisk系统管理员,你拥有选择加载模块的权利。你所加载的每一个模块,都提供了不同…

esp虚拟服务器,esp8266接入云服务器

esp8266接入云服务器 内容精选换一换公有云平台提供的云监控,可以对云耀云服务器的运行状态进行日常监控。您可以通过管理控制台,直观地查看云耀云服务器的各项监控指标。云耀云服务器正常运行。关机、故障、删除状态的云耀云服务器,无法在云…

EDM邮件营销时应该远离的8大不良做法

当我们进行EDM邮件营销时,应该远离一些不良做法。本文博主就为大家总结了8大不良做法,希望能对大家有所帮助。 1- 邮件内容只有图片而没有文字:垃圾邮件发送者为了避开反垃圾邮件系统的关键字检测,发明了用一个方法,就…