首页 > 其他分享 >Promise相关

Promise相关

时间:2024-01-24 22:31:40浏览次数:27  
标签:function resolve console log res Promise 相关

  • Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供了Promise对象。
  • Promise 是一个 ECMAScript 6 提供的类,目的是更加优雅地书写复杂的异步任务。
  • Promise是一个构造函数,通过new来实例化,主要解决异步编程。
  • 在 ES2015 中,Promise 诞生了。Promise 成功解决了回调函数嵌套调用和错误跟踪、回调函数控制权等问题。
  • 一个Promise对象有三种状态:pending(等待中)、fulfilled(已成功)或rejected(已失败)。当Promise对象处于pending状态时,它表示尚未完成,但可能会在未来某个时间完成。
简单回调:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script>
        console.log("发送第一个请求")
        setTimeout(function (){
            console.log("第一个请求结束")
            console.log("同时发送第二个请求")
            setTimeout(function (){
                console.log("第二个请求结束")
                console.log("发送第三个请求")
                setTimeout(function (){
                    console.log("第三个请求结束")
                }, 1500)
            }, 1000)
        }, 500)
    </script>
</head>
<body>

</body>
</html>

Promise相关_html

promise基本使用
 new Promise(function(resolve, reject) { });

例子:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script>
      function f1(){
          var p = new Promise(function (resolve, reject){
              console.log("发送了ajax请求1")
              setTimeout(function (){
                  //模拟返回包
                  let response_data = "你好,欢迎光临xxx网站"
                  let code = 500
                  if(code === 500){
                      // resolve执行将 promise的状态调整为 fulfilled
                      resolve(response_data)
                  }else{
                      // reject执行将 promise的状态调整为 rejected
                      reject("111111")
                  }

              }, 5000)
          })
          return p
      }
      // 等待状态
      let p = f1()
      p.then(function (res){
          // then的第一个函数触发条件: promise的状态调整为 fulfilled
          console.log("返回数据:", res)
          console.log("响应结束")
      }, function (){
          // then的第二个函数触发条件: promise的状态调整为 rejected
      })
    </script>
</head>
<body>

</body>
</html>
then函数

Promise实例生成以后,可以用then方法分别指定resolved状态和rejected状态的回调函数**。** Promise实例具有then方法,也就是说,then方法是定义在原型对象Promise.prototype上的。它的作用是为 Promise 实例添加状态改变时的回调函数。前面说过,then方法的第一个参数是resolved状态的回调函数,第二个参数是rejected状态的回调函数,它们都是可选的。 then方法返回的是一个新的Promise实例(注意,不是原来那个Promise实例)。因此可以采用链式写法,即then方法后面再调用另一个then方法。

如果初始函数里面没有指定resolve或者reject函数,那么 .then 函数是不会被调用的,因为之后状态变成了resolved或者rejected才会调用对应的回调函数。

Promise相关_回调函数_02

链式应用

使用Promise可以更好地处理异步操作,例如网络请求,文件读取等。它避免了死亡回调(callback hell)的问题,使得代码更加容易理解和维护。

笨的例子:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script>
        function f1(){
            return new Promise(function (resolve, reject){
                console.log("发送第一个请求")
                setTimeout(function (){
                    resolve("第一个返回值!")
                }, 1000)
            })
        }

        let p = f1()
        p.then(function (res){
            // 第一个请求处理
            console.log("返回:::", res)
            var p = new Promise(function (resolve, reject){
                console.log("发送第二个请求")
                setTimeout(function (){
                    resolve("第二个返回值!")
                }, 2000)
            })
            p.then(function (res){
                console.log("第二个的返回:::", res)
            })
        })
    </script>
</head>
<body>

</body>
</html>

Promise相关_html_03

这样并不能达到简洁的目的。

改进:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script>
        function f1(){
            return new Promise(function (resolve, reject){
                console.log("发送第一个请求")
                setTimeout(function (){
                    resolve("第一个返回值!")
                }, 1000)
            })
        }

        function f2(){
            return new Promise(function (resolve, reject){
                console.log("发送第二个请求")
                setTimeout(function (){
                    resolve("第二个返回值!")
                }, 2000)
            })
        }

        function f3(){
            return new Promise(function (resolve, reject){
                console.log("发送第三个请求")
                setTimeout(function (){
                    console.log("第三个返回值!")
                }, 3000)
            })
        }

        let p = f1()
        p.then(function (res){
            // 第一个请求处理
            console.log("第一个返回:::", res)
            return f2()
        }).then(function (res){
            console.log("第二个返回:::", res)
            return f3()
        }).then(function (res){
            console.log("第三个返回:::", res)
        })
    </script>
</head>
<body>

</body>
</html>

Promise相关_html_04

也就是链式调用

简单应用:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script>
</head>
<body>

<script>
    function GetData(url){
        return new Promise(function (resolve, reject){
            console.log("开始发送")
            $.ajax({
                url: url,
                success: function (res){
                    resolve(res)
                }
            })
        });
    }
    let base_url = "https://devapi.qweather.com/v7/weather/now?location=101070101&key=0718ad154da14f0a98ca49778f9bfd53"
    GetData(base_url).then(function (res){
        console.log("response_data:::", res.now)
        return GetData(base_url)
    }).then(function (res){
        console.log("response_data:::", res.refer)
    })
</script>
</body>
</html>

Promise相关_ajax_05


标签:function,resolve,console,log,res,Promise,相关
From: https://blog.51cto.com/u_16172166/9403241

相关文章

  • cprimerplus代码相关汇总
    第一章初识C语言重点内容起源:1972,贝尔实验室。继承B语言。特点:功能强大,应用范围广泛。设计步骤:1.定义程序目标2.设计程序3.编写代码4.编译5.运行程序6.测试和调试程序7.维护和修改程序本章小结C是强大而简洁的编程语言。它之所以流行,在于自身提供大量的实用编程工具,能很好......
  • 数据库查库的相关操作
    join的用法在数据库中,JOIN是一种查询操作,用于从两个或多个表中基于它们之间的关联关系合并行。JOIN允许你根据指定的连接条件将不同表中的数据行结合起来,创建一个临时的结果集,这个结果集就像是由所有参与JOIN的表组合成的一个“虚拟”表。具体来说:内连接(INNERJOIN):返回两个表中......
  • linux系统相关信息查询
    查看主机内核版本:cat/etc/redhat-release查看系统发行版本:uname-r查看主机cpu:lscpu查看主机内存:free-m......
  • 后仿 Timing violation 相关
    后仿出现的Violation那些是可以waive掉的                                            需要设计确认是否可以waive掉时                   ......
  • AI4Science 再填新成员:谷歌推出天气模型MetNet-3 已落地相关产品、谷歌天气预报模型Gr
    相关:https://zhidx.com/news/40169.htmlhttps://zhidx.com/news/40290.html论文地址:https://www.science.org/doi/10.1126/science.adi2336《Learningskillfulmedium-rangeglobalweatherforecasting》Editor’ssummaryThenumericalmodelsusedtopredictwea......
  • Microsoft 365:如何在Azure AD中注册Application并授权相关Graph API
    51CTOBlog地址:https://blog.51cto.com/u_13969817在使用Powershell连接GraphAPI之前,首先管理员要在AzureAD中新建Application,并授权APIPermission和Credentials,本文将给大家做细节介绍:·      在AzureAD中注册Application·      授权GraphAPIPermission· ......
  • JavaScript DOM表单相关操作之表单相关事件
    1、焦点事件焦点事件就是鼠标的光标事件,点到输入框中,叫做获得焦点事件,当鼠标离开这个输入框时叫做失去焦点事件。<!DOCTYPEhtml><html><head><metacharset="UTF-8"><title>知数SEO_专注搜索引擎优化和品牌推广</title></head><body><form><h3>输......
  • JavaScript DOM表单相关操作之表单验证
    在大部分的情况下我们希望用户输入的数据是我们理想中的格式,尤其是在用户注册上,一些重要的信息我们是不允许用户乱写的,如手机号,邮箱等。接下来一起看几种表单验证的方式:1、验证长度验证长度是比较简单的,input标签元素的maxlength属性可以设置可输入的最大长度//用maxlength属......
  • CSS_边框相关属性
    1、border: ;    2、表格独有属性    ......
  • 这一次,弄明白JS中的文件相关(二):HTTP请求头和响应头
    (一)前置知识开始前,我们先来复习一下HTTP的基础知识。HTTP请求分为:请求行、请求头、空行、请求体(也叫正文、请求实体、请求主体)。HTTP响应分为:状态行(也叫响应行)、响应头、空行、响应体(也叫正文、响应实体、响应主体)。在HTTP请求中,最常见的GET请求是没有请求体的(GET的查询字符串......