随着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的简单理解的更多相关文章

  1. Promise的简单用法

    众所周知的,Javascript是一种单线程的语言,所有的代码必须按照所谓的“自上而下”的顺序来执行.本特性带来的问题就是,一些将来的.未知的操作,必须异步实现.本文将讨论一个比较常见的异步解决方案— ...

  2. 【原创】分布式之数据库和缓存双写一致性方案解析(三) 前端面试送命题(二)-callback,promise,generator,async-await JS的进阶技巧 前端面试送命题(一)-JS三座大山 Nodejs的运行原理-科普篇 优化设计提高sql类数据库的性能 简单理解token机制

    [原创]分布式之数据库和缓存双写一致性方案解析(三)   正文 博主本来觉得,<分布式之数据库和缓存双写一致性方案解析>,一文已经十分清晰.然而这一两天,有人在微信上私聊我,觉得应该要采用 ...

  3. 关于 Promise 的一些简单理解

    一.ES6 中的 Promise 1.JS 如何解决 异步问题? (1)什么是 同步.异步? 同步指的是 需要等待 前一个处理 完成,才会进行 下一个处理. 异步指的是 不需要等待 前一个处理 完成, ...

  4. 简单理解ECMAScript2015中的箭头函数新特性

    箭头函数(Arrow functions),是ECMAScript2015中新加的特性,它的产生,主要有以下两个原因:一是使得函数表达式(匿名函数)有更简洁的语法,二是它拥有词法作用域的this值,也 ...

  5. Q promise API简单翻译

    详细API:https://github.com/kriskowal/q/wiki/API-Reference Q提供了promise的一种实现方式,现在在node中用的已经比较多了.因为没有中文的a ...

  6. generator 到 async 的简单理解。

    generator 到 async 的简单理解.觉得实现方式很有意思. 1. generator generator 函数返回一个遍历器对象 遍历器对象 每次调用next 方法 返回 有着value ...

  7. git的简单理解及基础操作命令

    前端小白一枚,最近开始使用git,于是花了2天看了廖雪峰的git教程(偏实践,对于学习git的基础操作很有帮助哦),也在看<git版本控制管理>这本书(偏理论,内容完善,很不错),针对所学 ...

  8. 简单理解Struts2中拦截器与过滤器的区别及执行顺序

    简单理解Struts2中拦截器与过滤器的区别及执行顺序 当接收到一个httprequest , a) 当外部的httpservletrequest到来时 b) 初始到了servlet容器 传递给一个标 ...

  9. [转]简单理解Socket

    简单理解Socket 转自 http://www.cnblogs.com/dolphinX/p/3460545.html  题外话 前几天和朋友聊天,朋友问我怎么最近不写博客了,一个是因为最近在忙着公 ...

  10. Js 职责链模式 简单理解

    js 职责链模式 的简单理解.大叔的代码太高深了,不好理解. function Handler(s) { this.successor = s || null; this.handle = funct ...

随机推荐

  1. 关于wx.panel中添加wx.button按钮无显示问题记录

    本次出现按钮不显示的原因为pos坐标理解出错: 1.按钮之所没有出现,是因为将全局坐标作为按钮pos的定位,导致在有限的panel布局内无法显示出按钮: 2.经过调试发现当pos=(-1,-1)时,按 ...

  2. Windows10一劳永逸的禁止更新/恢复更新

    之前发表过一篇文章Windows10彻底关闭自动更新,这篇文章相对复杂了些.而且还是有一定几率会触发从而自动打开更新.下面讲的就是怎么一次性永久关闭更新,即使触发了更新,也不能下载更新,从而达到真正的 ...

  3. mac tip---->开发的tip

    delete webstorm Besides we delete the Webstorm App, We also need to delete related config or log dir ...

  4. 在云服务器上搭建个人版chatGPT及后端Spring Boot集成chat GPT

    总结/朱季谦 本文分成两部分,包括[国内服务器上搭建chat GPT]和[后端Spring Boot集成chat GPT]. 无论是在[国内服务器上搭建chat GPT]和[后端Spring Boot ...

  5. 官方文档 | 【JVM调优体系】「GC底层调优实战」XPocket为终结性能问题而生—开发指南

    XPocket 用户文档 XPocket 是PerfMa为终结性能问题而生的开源的插件容器,它是性能领域的乐高,将定位或者解决各种性能问题的常见的Linux命令,JDK工具,知名性能工具等适配成各种X ...

  6. '林子雨大数据' 实验3 HBase操作与接口编程

    "林子雨大数据" 实验3 HBase操作与接口编程 环境搭建 VM虚拟机和Ubuntu系统的安装 在Windows中使用VirtualBox安装Ubuntu虚拟机(2020年7月版 ...

  7. Centos9网卡配置

    Centos9 网卡配置文件已修改,如下 [root@bogon ~]# cat /etc/NetworkManager/system-connections/ens18.nmconnection [ ...

  8. python之wypy入门

    wxPython入门 第一个应用程序:"Hello, World!" 按惯例,我们先来写一个 "Hello, World!" 小程序.这是代码: # -*- c ...

  9. SQL concat_ws, collect_set, 和explode合并使用

    1. 背景 有一个这样的数据集:字段和字段的值是两列 目的是将这个数据转换成规整的一个特征是一列的数据: 2. 做法 第一步:先造出列 select ucid ,CASE WHEN type ='性别 ...

  10. android studio 做登陆界面

    先来一个最简单的     AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> &l ...