对promise的简单理解
随着ES6的推行它的许多新特性受到了广大开发者的好评,比如promise,为什么使用这个promise呢,他具体能帮我们做些啥?
其实从字面意思上来理解promise
就是承诺,比如:你命令你的手下本月推销100台产品,他回复没问题百分百完成任务;在这个时候你得到的最终结果就是一个承诺。
还是从案例来理解哈比较清楚;
一、 传统的方法获取多个api异步回调的结果
var user = {
getUserID: function (succCallback, failCallback) {
$.ajax({
type: "POST",
url: "",
data: {},
headers: {},
success: function (response) {
succCallback && succCallback(response);
},
error: function (err) {
failCallback && failCallback(err)
}
});
},
getUserName: function (id, succCallback, failCallback) {
$.ajax({
type: "POST",
url: "",
data: {
id: id
},
headers: {},
success: function (response) {
succCallback && succCallback(response);
},
error: function (err) {
failCallback && failCallback(err)
}
});
},
getUserInfo: function (name, succCallback, failCallback) {
$.ajax({
type: "POST",
url: "",
data: {
name: name
},
headers: {},
success: function (response) {
succCallback && succCallback(response);
},
error: function (err) {
failCallback && failCallback(err)
}
});
},
// 看这个调用是否有点老火
getUserData: function (succCallback, failCallback) {
this.getUserID(isRes => {
this.getUserName(isRes, nameRes => {
this.getUserInfo(nameRes, response => {
succCallback && succCallback(response);
}, err => {
failCallback && failCallback(err)
})
}, err => {
})
}, err => {
})
}
}
module.exports = user;
二、 使用promise获取多个api异步回调的结果
var user = {
getUserID: function () {
return new Promise((resolve, reject) => {
$.ajax({
type: "POST",
url: "",
data: {},
headers: {},
success: function (response) {
resolve(response);
},
error: function (err) {
reject(err)
}
});
})
},
getUserName: function (id) {
return new Promise((resolve, reject) => {
$.ajax({
type: "POST",
url: "",
data: {
id: id
},
headers: {},
success: function (response) {
resolve(response);
},
error: function (err) {
reject(err)
}
});
})
},
getUserInfo: function (name) {
return new Promise((resolve, reject) => {
$.ajax({
type: "POST",
url: "",
data: {
name: name
},
headers: {},
success: function (response) {
resolve(response);
},
error: function (err) {
reject(err)
}
});
})
},
// 这个调用是否看起来要更清晰一点
getUserData: function () {
return new Promise((resolve, reject) => {
this.getUserID().then(resID => {
return this.getUserName(resID);
}).then(resName => {
return this.getUserInfo(resName);
}).then(res => {
resolve(res);
}).catch(err => {
reject(err);
})
})
},
// 另一种调用
/* getUserData: function () {
return new Promise((resolve, reject) => {
this.getUserID().then(resID => {
this.getUserName(resID).then(resName => {
this.getUserInfo(resName).then(res => {
resolve(res);
}).catch(err => {
reject(err)
})
}).catch(err => {
})
}).catch(err => {
})
})
}
*/
}
module.exports = user;
个人理解使用promise
就是:我们不用再自己写callback回调来获取异步操作后的结果了(理解不正确的欢迎指正)
对promise的简单理解的更多相关文章
- Promise的简单用法
众所周知的,Javascript是一种单线程的语言,所有的代码必须按照所谓的“自上而下”的顺序来执行.本特性带来的问题就是,一些将来的.未知的操作,必须异步实现.本文将讨论一个比较常见的异步解决方案— ...
- 【原创】分布式之数据库和缓存双写一致性方案解析(三) 前端面试送命题(二)-callback,promise,generator,async-await JS的进阶技巧 前端面试送命题(一)-JS三座大山 Nodejs的运行原理-科普篇 优化设计提高sql类数据库的性能 简单理解token机制
[原创]分布式之数据库和缓存双写一致性方案解析(三) 正文 博主本来觉得,<分布式之数据库和缓存双写一致性方案解析>,一文已经十分清晰.然而这一两天,有人在微信上私聊我,觉得应该要采用 ...
- 关于 Promise 的一些简单理解
一.ES6 中的 Promise 1.JS 如何解决 异步问题? (1)什么是 同步.异步? 同步指的是 需要等待 前一个处理 完成,才会进行 下一个处理. 异步指的是 不需要等待 前一个处理 完成, ...
- 简单理解ECMAScript2015中的箭头函数新特性
箭头函数(Arrow functions),是ECMAScript2015中新加的特性,它的产生,主要有以下两个原因:一是使得函数表达式(匿名函数)有更简洁的语法,二是它拥有词法作用域的this值,也 ...
- Q promise API简单翻译
详细API:https://github.com/kriskowal/q/wiki/API-Reference Q提供了promise的一种实现方式,现在在node中用的已经比较多了.因为没有中文的a ...
- generator 到 async 的简单理解。
generator 到 async 的简单理解.觉得实现方式很有意思. 1. generator generator 函数返回一个遍历器对象 遍历器对象 每次调用next 方法 返回 有着value ...
- git的简单理解及基础操作命令
前端小白一枚,最近开始使用git,于是花了2天看了廖雪峰的git教程(偏实践,对于学习git的基础操作很有帮助哦),也在看<git版本控制管理>这本书(偏理论,内容完善,很不错),针对所学 ...
- 简单理解Struts2中拦截器与过滤器的区别及执行顺序
简单理解Struts2中拦截器与过滤器的区别及执行顺序 当接收到一个httprequest , a) 当外部的httpservletrequest到来时 b) 初始到了servlet容器 传递给一个标 ...
- [转]简单理解Socket
简单理解Socket 转自 http://www.cnblogs.com/dolphinX/p/3460545.html 题外话 前几天和朋友聊天,朋友问我怎么最近不写博客了,一个是因为最近在忙着公 ...
- Js 职责链模式 简单理解
js 职责链模式 的简单理解.大叔的代码太高深了,不好理解. function Handler(s) { this.successor = s || null; this.handle = funct ...
随机推荐
- 自己动手从零写桌面操作系统GrapeOS系列教程——17.用汇编语言清空屏幕
学习操作系统原理最好的方法是自己写一个简单的操作系统. 在QEMU中会默认输出一些字符,有时候会干扰我们自己输出的字符.一个比较好的办法是向将屏幕清空,再输出我们想要输出的字符.下面就来学习如何清空屏 ...
- 10 个杀手级的 Python 自动化脚本
重复性任务总是耗时且无聊,想一想你想要一张一张地裁剪 100 张照片或 Fetch API.纠正拼写和语法等工作,所有这些任务都很耗时,为什么不自动化它们呢?在今天的文章中,我将与你分享 10 个 P ...
- volatile 关键字(轻量级同步机制)
更多内容,前往IT-BLOG volatile 表示 "不稳定" 的意思.用于修饰共享可变变量,即没有使用 final(不可变变量) 关键字修饰的实例变量或静态变量,相应的变量就被 ...
- 如何单机部署多个 MySQL 8.0 实例 ?
在服务器资源有限的情况下,可利用该方案快速搭建各类 mysql 架构方案.各 MySQL 实例共享一个 mysqld 主程序,但各实例数据目录是独立的,存放在不同的文件夹中:好了.废话不多说,直接上干 ...
- 使用Kubernetes快速启用一个静态页面
使用Kubernetes快速启用一个静态页面 将html静态页面放置在nfs目录下,通过Deployment启动时挂在到nginx页面目录即可 查看yaml内容 root@hello:~# cat c ...
- KubeSphere 升级 && 安装后启用插件
KubeSphere 升级 root@master1:~# export KKZONE=cn root@master1:~# kk upgrade --with-kubernetes v1.22.1 ...
- 1.springsecurity基于内存和数据库的认证
1.总结: 昨天主要是使用security实现了基于内存的认证和基于数据库的认证(实际项目中使用): 在security的项目中,必须配置WebSecurityConfigurerAdaptor的实现 ...
- 从0到1手把手教你ASP.NET Core Web API项目配置接口文档Swagger(一)
一.创建ASP.NET Core Web API项目(若项目已创建,则可跳过本节内容) 1.双击打开VS2022. 2.单击"创建新项目",如下图. 3.选择"ASP.N ...
- 【D02】Bootstrap免费精选模板推荐,附上Django中使用模板教程
前端模板 - Anchor UI KIT 前言 今天介绍一款制作精良.开源.免费的 Bootstrap 模板 -- Anchor UI KIT 该模板使用的是Bootstrap v4版本 本文将介绍如 ...
- 这是一篇记录——django-xadmin重新开发记录
利用下面的代码把django的版本换成和xadmin2适配的版本,注意xadmin最新版本出了3.0但是就是一个纯前端的框架,和之前的版本差异较大. 因为此时距离ddl不到24小时,所以使用旧的版本. ...