今天一个哥们发过来一段js代码,没看懂,就顺便学习了一下,代码如下

 Promise.resolve('zhangkai').then(value => {console.log(value)})
经过搜索,才知道是Promise的应用,于是就做一下笔记,整理一下,以及项目中可以派上的用场。
 
什么是Promise对象
Promise对象是CommonJS工作组为异步编程提供的统一接口,是ECMAScript6中提供了对Promise的原生支持,Promise就是在未来发生的事情,使用Promise可以避免回调函数的层层嵌套,还提供了规范更加容易的对异步操作进行控制。提供了reject,resolve,then和catch等方法。
 
优势在于连续的异步回调嵌套的场景,可以用一种近似于同步的语法来表现。
 
Promise 的存在不是为了让语法看起来像同步,而是为了让回调的使用更有章法,更可控。
 
Promise对象的几个重要的点
1、promise有三种状态, 等待(pending)、已完成(fulfilled)、已拒绝(rejected)
2、promise的状态只能从“等待”转到“完成”或者“拒绝”,不能逆向转换,同时“完成”和“拒绝”也不能相互转换
3、promise必须有一个then方法,而且要返回一个promise,供then的链式调用,也就是可thenable的
4、then接受俩个回调(成功与拒绝),在相应的状态转变时触发,回调可返回promise,等待此promise被resolved后,继续触发then链
 
Promise对象的写法:
var p=new Promise(function(resolve,eject){
resolve("ok");
});
p.then(function(value){console.log(val)},
function(err)(console.log(err))
);

then()方法的第一个参数是resolved状态的回调函数,第二个参数(可选)是rejected状态的回调函数。

有两种写法:

(1)Promise.resolve("foo");

  所以才有了我这个哥们给我发的代码:Promise.resolve('zhangkai').then(value => {console.log(value)})

(2)var p = new Promise(function(resolve){   resolve("foo"); });

学习了Promise对象,想了想实际项目中的应用:

实际中有这么一个需求,查询学生的信息列表,有一个文本框可以输入学生的姓名,可以进行查找指定的学生信息,如果不存在就不进行学生信息列表的查询了,如果存在,再进行下一步的查询。(通过使用ajax实现)

首先,写一个通过ajax判断该学生是否存在的方法,然后,如果存在,写一个通过ajax查询该学生信息的方法;不存在的话,提示一下即可。

代码如下:

    <script type="text/javascript">

        //判断是否存在该学生姓名
var isExistStu = function (name) {
var promise = new Promise(function (resolve, reject) {
$.ajax({
type: "Post",
url: "/student/student/checkstu",
dataType: "json",
data: JSON.stringify({
name: name
}),
contentType: "application/json;charset-utf-8",
success: function (data) {
resolve(data); //data 返回来的是 true 或者 false
}
});
});
} //查询根据学生姓名查询学生信息列表
var searchStu = function (name) {
var promise = new Promise(function (resolve, reject) {
$.ajax({
type: "Post",
url: "/student/student/getstulist",
dataType: "json",
data: JSON.stringify({
name: name
}),
contentType: "application/json;charset-utf-8",
success: function (data) {
resolve(data); //data 返回来的是学生信息列表
}
});
});
} window.onload = function () {
var stuName = $("txtName").val();
isExistStu(stuName).then(function (data) {
if (data == "true") {
return searchStu(stuName);
}
else {
return;
}
}).then(function (data) {
showTable(data);
})
} //展示 学生信息列表表格
function showTable(data) {
var html = "<table>";
for (var i = 0; i < data.length; i++) {
html += "<tr>";
html += "<td>" + data.name + "</td>";
html += "<td>" + data.address + "</td>";
html += "</tr>";
}
html += "</table>"; $("#divTable").html(html);
} </script>
 

最新文章

  1. 《深入理解 java虚拟机》学习笔记
  2. js随机从数组中取出几个元素
  3. cocos2d-x生成随机数
  4. 【面试题】如何让C语言自动发现泄漏的内存
  5. 【Java基础】final关键字总结
  6. json 转对象
  7. 使用HttpClient4.5实现HTTPS的双向认证
  8. Android绘图基础Paint和Canvas介绍-android学习之旅(六十一)
  9. React Native移植原生Android
  10. Docker bridge br0 pipework
  11. LVS (Linux Virtual Server) 负载均衡
  12. atom插件安装失败解决方法
  13. python第三方包安装方法(两种方法)
  14. Java 利用 poi 生成 Excel文件的通用例子
  15. [hadoop读书笔记] 第三章 HDFS
  16. 【TCP/IP详解 卷一:协议】第十二章 广播和多播
  17. 微信小程序--登录流程梳理
  18. ValueError: Argument must be a dense tensor:... got shape [6, 60, 160, 3], but wanted [6].
  19. 列表(ul ol dl)
  20. mysql备份的 三种方式【转】

热门文章

  1. div被object覆盖的解决办法
  2. Java之美[从菜鸟到高手演变]之设计模式
  3. 注册Github
  4. hdu 1532(最大流)
  5. LINQ 嵌套查询
  6. 做办公用品、文具方面的 B2C 是否有前景呢?
  7. linux C++ 共享库导出类
  8. androidd 程序默认安装位置和数据存储位置(公用和私用)
  9. Unparsed aapt error(s)! Check the console for output解决方法
  10. ActiveXObject函数详解