JavaScript中 Promise的学习以及使用

今天一个哥们发过来一段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>
时间: 2024-10-29 09:29:17

JavaScript中 Promise的学习以及使用的相关文章

全面理解Javascript中Promise

全面理解Javascript中Promise 最近在学习Promise的时候,在网上收集了一些资料,发现很多的知识点不够系统,所以小编特意为大家整理了一些自认为 比较好的文章,供大家更好地学习js中非常有趣的Promise Promise概念 2015 年 6 月,ECMAScript 6 的正式版 终于发布了. ECMAScript 是 JavaScript 语言的国际标准,javascript 是 ECMAScript 的实现.ES6 的目标,是使得 JavaScript 语言可以用来编写大

javascript中的正则表达式学习

一.前言 关于正则表达式自身的语法这里不做过多介绍(详情可参见http://www.php100.com/manual/unze.html),这里仅仅解释javascript中和正则表达式相关的几个方法的使用. 二.javascript中的RegExp对象 在javascript中,有两种方法可以构建正则: 正则表达式字面量 RegExp构造器 RegExp对象有以下属性: global:如果标识g,则为true ignoreCase:如果标识i被使用,则为true lastIndex:下一次e

Javascript中Promise的简单使用

1 // 函数功能:1秒以后创建一个10以内的随机整数,并判断这个数是否为偶数:如果是偶数则做一件事情,如果是奇数则做另一件事情 2 function doSomthing() { 3 var promise = new Promise(function (resolve, reject) { 4 setTimeout(function () { 5 const num = Math.round(Math.random() * 10); 6 if (num % 2 === 0) { 7 reso

浅谈Javascript中Promise对象的实现

https://segmentfault.com/a/1190000000684654 What? Promise是CommonJS的规范之一,拥有resolve.reject.done.fail.then等方法,能够帮助我们控制代码的流程,避免函数的多层嵌套.如今异步在web开发中越来越重要,对于开发人员来说,这种非线性执行的编程会让开发者觉得难以掌控,而Promise可以让我们更好地掌控代码的执行流程,jQuery等流行的js库都已经实现了这个对象,年底即将发布的ES6也将原生实现Promi

JavaScript中NODE操作学习总结

Node: 1.在 HTML DOM (文档对象模型)中,每个部分都是节点:    文档本身是文档节点     所有 HTML 元素是元素节点     所有 HTML 属性是属性节点     HTML 元素内的文本是文本节点     注释是注释节点  2.节点属性:    element.childNodes 返回元素子节点的 NodeList     element.className 设置或返回元素的 class 属性     element.firstChild 返回元素的首个子节点   

javascript中的事件学习总结

一.实例: 一段用js实现的固定边栏滚动特效代码(跨浏览器使用): 二.总结: 由于事件处理在不同浏览器之间存在差异(主要是要考虑ie8及以下浏览器的兼容性),所以在使用处理事件的方法之前,先要判断当前使用的浏览器是否含有该方法(这种方法也叫平稳退化,防止我们写的页面因为在某些不兼容我们在页面中写的js,而不能正常显示我们写的页面的情况). 1.两种事件处理的方法:addEventListener()和attachEvent(): addEventListener('event',evenfun

Javascript 中的arguments 学习

arguments是当前正在执行的function的一个参数,它保存了函数当前调用的参数. 使用方法:function.arguments[i]. 其中function.是可选项,是当前正在执行的function的名称. arguments不能够创建,是函数自身的参数,只有当函数开始执行是才能使用. 虽然arguments的使用方法,很像数组,但是它并不是数组. 下面,用例子来进行演示: function argumentsTest (a,b) { alert(typeof arguments)

关于javascript中defineProperty的学习

语法 Object.defineProperty(obj, prop, descriptor) 参数 obj 要在其上定义属性的对象. prop 要定义或修改的属性的名称. descriptor 将被定义或修改的属性描述符. 返回值 被传递给函数的对象. 使用说明: 我们一般给一个对象创建一个新的属性时,大部分采用的都是如下方式: var obj = {}; obj.key = "Hello" 但是这种创建方式的属性,其值可被修改,可被遍历等等. 如果想创建隐藏属性(使用for in

[JavaScript]JavaScript中的函数(1)

关于JavaScript中函数的学习: MDN 阮一峰老师的教程 关于函数的定义: 阮一峰老师:函数是一段可以反复调用的代码块.函数还能接受输入的参数,不同的参数会返回不同的值. MDN:Function 构造函数 创建一个新的Function对象. 在 JavaScript 中, 每个函数实际上都是一个Function对象. 函数的声明方式和name 函数的声明方式有目前来说有5种,每一个函数都有他的一个name属性(包括匿名函数),要注意. 具名函数 function fn(x,y) { c