12.18

news2024/12/22 20:33:46

一.加强练习promise

1.fs模块

const fs = require('fs')
const p = new Promise((resolve,reject) => {
    fs.readFile('./resource/context.txt', (err,data) => {
        if (err) reject(err)
        resolve(data)
    })
})
p.then((value) => {
    console.log(value.toString())
}, (reason) => {
    console.log(reason)
})
const util = require('util')
const fs = require('fs')
let readfile = util.promisify(fs.readFile)//传入fs.readFile方法 返回一个新函数
readfile('./resource/context.txt').then((value) => {//调用函数返回结果为promise对象
    console.log(value.toString())
}, (reason) => {
    console.log(reason)
})

2.AJAX模块

 

 

 3.async await

const fs = require('fs')
const util = require('util')
let readfile = util.promisify(fs.readFile)
async function main() {
    let data1 = await readfile('')//路径
    let data2 = await readfile('')
    let data3= await readfile('')
   console.log(data1+data2+data3)
    
}
main()

4.发送请求

 //封装的AJAX请求
        function sendAJAX(url){
         return new Promise((resolve,reject)=>{
            const xhr=new XMLHttpRequest()
            xhr.open('GET',url)
            xhr.send()
            xhr.onreadystatechange=function(){
                if(xhr.readyState==4){
                    if(xhr.status>=200&&xhr.status<300){
                        resolve(xhr.response)
                    }
                    reject(xhr.status)
                }
                
            }
         })
        }

     const btn=document.querySelector('button')
     btn.addEventListener('click', async function(){
        let p=await sendAJAX('')//url
        console.log(p)
     })

5.async

async function main(){
         let p =new Promise((resolve,reject)=>{
        //    resolve('ok')
           reject('error')
         })
        //1.await右侧是Promise对象 返回promise成功的值
         let res=await p
         //2.是其他类型数据
         let res1=await 123
         //3.Promise 是失败的状态
        try{
            let res2=await p
         } catch(e){
        console.log(e)
         }
        }
        main()

6.自定义

function Promise(executor){
    this.PromiseState='pending'
    this.PromiseResult=null
    this.callback={}
    const self=this //到时候实例化的时候会指向此构造函数
    
    
    
    //定义resolve函数
    function resolve(data){
      //1.修改对象状态(PromiseState)
      if(self.PromiseState!=='pending') return
       self.PromiseState='fulfilled'
       //2.设置对象结果值(PromiseResult)
       self.PromiseResult=data
       if(self.callback.success){
        self.callback.success(data)
       }
      
    }


    //定义reject函数
    function reject(data){
        if(self.PromiseState!=='pending') return
        self.PromiseState='rejected'
        self.PromiseResult=data
        if(self.callback.failure){
            self.callback.failure(data)
           }
    }
   try{
    executor(resolve,reject)
   }
   catch(e){
      reject(e)
   }

   
}
//原型上放个then方法
Promise.prototype.then=function(onResolved,onRejected){
   
    if(this.PromiseState=='fulfilled'){
        onResolved(this.PromiseResult)
    }
    if(this.PromiseState=='rejected'){
        onRejected(this.PromiseResult)
    }
    //异步
    if(this.PromiseState=='pending'){
       this.callback={
        success:onResolved,
        failure:onRejected
       }
    }
   
}

二.AJAX

1.1 AJAX 简介
AJAX 全称为 Asynchronous JavaScript And XML,就是异步的 JS 和 XML。
通过 AJAX 可以在浏览器中向服务器发送异步请求,最大的优势:无刷新获取数据。
AJAX 不是新的编程语言,而是一种将现有的标准组合在一起使用的新方式。
1.2 XML 简介
XML 可扩展标记语言。
XML 被设计用来传输和存储数据。
XML 和 HTML 类似,不同的是 HTML 中都是预定义标签,而 XML 中没有预定义标签,全都是自定义标签,用来表示一些数据。
1.3 AJAX 的特点
1.3.1 AJAX 的优点
1) 可以无需刷新页面而与服务器端进行通信。
2) 允许你根据用户事件来更新部分页面内容。
1.3.2 AJAX 的缺点
1) 没有浏览历史,不能回退
2) 存在跨域问题(同源)
3) SEO 不友好
1.4 AJAX 的使用
1.4.1 核心对象
XMLHttpRequest,AJAX 的所有操作都是通过该对象进行的。
1.4.2 使用步骤
1) 创建 XMLHttpRequest 对象
var xhr = new XMLHttpRequest();
2) 设置请求信息
xhr.open(method, url);
//可以设置请求头,一般不设置
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
3) 发送请求
xhr.send(body) //get 请求不传 body 参数,只有 post 请求使用4) 接收响应
//xhr.responseXML 接收 xml 格式的响应数据
//xhr.responseText 接收文本格式的响应数据
xhr.onreadystatechange = function (){
if(xhr.readyState == 4 && xhr.status == 200){
var text = xhr.responseText;
console.log(text);
}
}

1.5.1 解决 IE 缓存问题 问题:在一些浏览器中(IE),由于缓存机制的存在,ajax 只会发送的第一次请求,剩 余多次请求不会在发送给浏览器而是直接加载缓存中的数据。 解决方式:浏览器的缓存是根据 url 地址来记录的,所以我们只需要修改 url 地址 即可避免缓存问题 xhr.open("get","/testAJAX?t="+Date.now());

1.5.2.AJAX 请求状态 xhr.readyState 可以用来查看请求当前的状态 https://developer.mozilla.org/zh-CN/docs/Web/API/XMLHttpRequest/readyState 0: 表示 XMLHttpRequest 实例已经生成,但是 open()方法还没有被调用。 1: 表示 send()方法还没有被调用,仍然可以使用 setRequestHeader(),设定

请求的头信息。 2: 表示 send()方法已经执行,并且头信息和状态码已经收到。 3: 表示正在接收服务器传来的 body 部分的数据。 4: 表示服务器数据已经完全接收,或者本次接收已经失败了

jQuery 中的 AJAX

1. get 请求 $.get(url, [data], [callback], [type]) url:请求的 URL 地址。 data:请求携带的参数。 callback:载入成功时回调函数。 type:设置返回内容格式,xml, html, script, json, text, _default。 2. post 请求 $.post(url, [data], [callback], [type]) url:请求的 URL 地址。 data:请求携带的参数。 callback:载入成功时回调函数。 type:设置返回内容格式,xml, html, script, json, text,

三.Promise

为什么使用promise

(1)指定回调函数的方式更加灵活

1. 旧的: 必须在启动异步任务前指定

2. promise: 启动异步任务 => 返回promie对象 => 给promise对象绑定回调函 数(甚至可以在异步任务结束后指定/多个)

(2) 支持链式调用, 可以解决回调地狱问题

1. 什么是回调地狱? 回调函数嵌套调用, 外部回调函数异步执行的结果是嵌套的回调执行的条件

2. 回调地狱的缺点? 不便于阅读 不便于异常处理

3. 解决方案? promise 链式调用

1. Promise 构造函数: Promise (excutor) {}

(1) executor 函数: 执行器 (resolve, reject) => {}

(2) resolve 函数: 内部定义成功时我们调用的函数 value => {}

(3) reject 函数: 内部定义失败时我们调用的函数 reason => {} 说明: executor 会在 Promise 内部立即同步调用,异步操作在执行器中执行

2. Promise.prototype.then 方法: (onResolved, onRejected) => {}

(1) onResolved 函数: 成功的回调函数 (value) => {}

(2) onRejected 函数: 失败的回调函数 (reason) => {} 说明: 指定用于得到成功 value 的成功回调和用于得到失败 reason 的失败回调 返回一个新的 promise 对象

3. Promise.prototype.catch 方法: (onRejected) => {} (1) onRejected 函数: 失败的回调函数 (reason) => {}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/100052.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端炫酷特效合集

我们经常在抖音上看到一些前端很酷的特效&#xff0c;诸如&#xff1a;快叫你学编程的朋友给你写一个圣诞树&#xff0c;看着是不是很酷炫呢&#xff1f;其实只要有源码&#xff0c;你也可以拥有哦&#xff01; 跟大家分享多款前端特效源码&#xff0c;需要的朋友可以去在这里…

Java : 多态,包装类的面试题:

Java &#xff1a; 多态&#xff0c;包装类的面试题&#xff1a; 每博一文案 有人说&#xff1a;小孩子才会仰天大哭&#xff0c;成年人的世界早就调成了静音模式&#xff0c;连崩溃也很懂事。 一路走来&#xff0c;我们一边受伤&#xff0c;也一边变得更坚强&#xff0c;慢慢…

数据库原理及MySQL应用 | 日志管理

数据库系统管理维护阶段需要通过日志对数据库的性能进行监督、分析和改进。 日志是数据库系统的重要组成部分&#xff0c;记录了数据库的运行状态、数据的变更历史、错误信息及用户操作等信息。在日常管理中&#xff0c;数据库管理员可通过日志监控数据库的运行状态、优化数据库…

国内外文献镜像网站

一、常用的国内外文献镜像网站 维普网&#xff1a;http://lib.cqvip.com/ idata&#xff1a;https://www.cn-ki.net/ 独秀&#xff1a;https://www.duxiu.com/ 中国知网&#xff1a;https://www.cnki.net/ 龙源期刊网&#xff1a;http://www.qikan.com.cn/ 万方数据&#xff1…

计算机毕业设计HTML+CSS+JavaScript仿大型购物商城(1页)

常见网页设计作业题材有 个人、 美食、 公司、 学校、 旅游、 电商、 宠物、 电器、 茶叶、 家居、 酒店、 舞蹈、 动漫、 服装、 体育、 化妆品、 物流、 环保、 书籍、 婚纱、 游戏、 节日、 戒烟、 电影、 摄影、 文化、 家乡、 鲜花、 礼品、 汽车、 其他等网页设计题目, A…

毕业设计 单片机GPS定位位置记录系统 - 物联网 嵌入式 stm32

文章目录0 前言1 简介2 主要器件3 实现效果4 硬件设计概述硬件模块的连接**AB32VG1主控MCU**5 软件说明6 部分核心代码7 最后0 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题目缺少创新和亮点&#xff0c;往往达不到毕业答辩…

基于asp.net人力资源管理系统-计算机毕业设计

基于asp.net的人力资源管理的内容和人事管理日常管理所遇到的问题&#xff0c;整个系统可以分为下面几个子模块&#xff0c;分别为员工档案信息管理、工资信息管理、考勤信息管理、消息信息管理、账号信息管理等几个大的功能模块,开发环境:Visual studio,sqlserver数据库.资料有…

非零基础自学Golang 第9章 结构体 9.4 初始化结构体

非零基础自学Golang 文章目录非零基础自学Golang第9章 结构体9.4 初始化结构体9.4.1 键值对格式初始化9.4.2 列表格式初始化第9章 结构体 9.4 初始化结构体 上一小节我们讲解了在结构体实例化后&#xff0c;再使用“.”的方式对成员变量进行赋值。另外&#xff0c;我们还可以…

Junit5 架构、新特性及基本使用(常用注解与套件执行)

什么是 Junit5&#xff0c;在 Junit5 的官方介绍文档中这写到&#xff1a; Junit5 由JUnit Platform JUnit Jupiter JUnit Vintage3部分构成&#xff0c;借用 IBM Developer 的一张图来说明 JUnit 5 的架构&#xff1a; JUnit Platform: JUnit Jupiter: JUnit Vintage: 嵌套单…

Spring Cloud 总结 - 调用远程服务的三种方式及原理分析

一个简单的微服务架构图 本文设计的 Spring Cloud 版本以及用到的 Spring Cloud 组件 Spring Cloud Hoxton.SR5eurekafeignribbon 后面的内容都将围绕上面的图来分析. 调用远程服务的三种方式 在 Spring Cloud 服务架构中, 一个服务可能部署多个实例, 通常情况下, 这个时候…

好玩的网站安利

好玩的网站安利 1、EGOUZ https://www.egouz.com/ 授人以鱼不如授人以渔&#xff0c;先给大家分享两个可以找国外优质网站的地方。EGOUZ是一个高质量的导航站&#xff0c;内容主要是外国网站&#xff0c;并且做了很详细的分类&#xff0c;网站资源非常丰富。 EGOUZ按照国家分…

50450-80-1,Ala-Ala-Ala-对硝基苯胺

AAA-pNA, chromogenic substrate for porcine pancreatic elastase and for astacin, a crayfish zinc-endopeptidase.3a - pna&#xff0c;猪胰腺弹性酶和阿斯塔星的显色底物&#xff0c;阿斯塔星是一种小龙虾锌内肽酶。 编号: 163840中文名称: 三肽Pancreatic elastase subst…

1573_AURIX_TC275_SCU中的急停功能以及overlay

全部学习汇总&#xff1a; GreyZhang/g_TC275: happy hacking for TC275! (github.com) 急停功能是不需要软件进行干预的&#xff0c;至少&#xff0c;这个事件的动作触发是不需要软件进行干预的。急停事件的触发因素&#xff1a;外部的输入事件、SMU的警报信息。外部的输入事件…

概率论 ‖ Machine Learning必备知识

概率论&#xff01;Machine Learning必备知识 文章目录概率论&#xff01;Machine Learning必备知识1 什么是概率1.1 最简单的例子1.2 概率论与数理统计的关系2 大数定律和中心极限定理2.1 大数定律是什么&#xff1f;2.2 代码直观理解大数定律2.3 中心极限定理2.4 大数定律和中…

Java基础开发之编译异常和运行异常

一、getProperties()方法 1.System类提供一个getProperties()方法用来**当前系统的全部属性&#xff0c;它会返回一个Properties对象&#xff0c;也封装了系统的全部属性&#xff0c;这些属性的存在是以键值对的形式。 2.getProperties()方法使用例子&#xff1a; public cl…

《数字电子技术》笔记

《数字电子技术》笔记绪论第一章 信息和编码第二章 逻辑代数第三章 门电路第四章 组合电路的逻辑与分析第五章 触发器第七章 可编程逻辑器件绪论 什么是电子技术&#xff1f;是研究电子器件及电子器件应用的学科。EDA&#xff1a;Electronic Design Automation电子电路用处&am…

【Python机器学习】回归任务、线性回归评价指标讲解及温度与花朵数线性回归实战(图文解释 附源码)

需要源码和数据集请点赞关注收藏后评论区留言私信~~~ 与分簇、分类和标注任务不同&#xff0c;回归任务预测的不是有限的离散的标签值&#xff0c;而是无限的连续值。回归任务的目标是通过对训练样本的学习&#xff0c;得到从样本特征集到连续值之间的映射。如天气预测任务中&a…

ERC-3525 开发入门指南

ERC-3525 标准是以太坊社区批准通过的半匀质化通证&#xff08;Semifungible Token, 亦称为半同质化通证&#xff0c;简称 SFT&#xff09;标准&#xff0c;由 Solv Protocol 提出。ERC-3525 标准定义了一类新型的数字资产&#xff0c;具有以下突出优势&#xff1a;与 ERC-721 …

网曝某公司HR向求职者索要高考成绩!你们还记得自己的高考分数吗?

奇葩年年有&#xff0c;今年特别多&#xff0c;一位网友曝光&#xff1a;在应聘北京某公司的时候&#xff0c;HR竟然跟自己索要高考成绩&#xff01;网友感叹&#xff0c;遇到过在学信网查本科学位的公司&#xff0c;但这种奇葩公司没见过。有人说&#xff0c;虽然问高考成绩确…

git status 查看仓库文件状态

1. 前言 2. 各种状态 3. -s 参数 4. --ignored 查看所有被忽略的文件 1. 前言 git status 命令用于查看当前 git 中的文件状态 这个命令会将工作区、暂存区、版本库中的文件状态输出到命令行界面 git status git status 命令是 git 中最常用的命令之一&#xff0c;当我们要执…