首页 > 其他分享 >关于HarmonyOS的学习

关于HarmonyOS的学习

时间:2024-09-25 19:52:59浏览次数:10  
标签:console 请求 res user 学习 HarmonyOS Promise 关于 log

day35

一、回调地狱

    // 比如我们发送三个 ajax 请求
    // - 第一个正常发送
    // - 第二个请求需要第一个请求的结果中的某一个值作为参数
    // - 第三个请求需要第二个请求的结果中的某一个值作为参数
    ajax_get({
        url: 'http://localhost:2402/user/test1',
        success(res){
            console.log('这是第一个请求的结果:', res)
            ajax_get({
                url: 'http://localhost:2402/user/test2',
                params: {a: res},
                success(res2){
                    console.log('这是第二个请求的结果:', res2)
                    ajax_get({
                        url: 'http://localhost:2402/user/test3',
                        params: {b: res2},
                        success(res3){
                            console.log('这是第三个请求的结果:', res3)
                        }
                    })
                }
            })
        }
    })

二、Promise(解决回调地狱)

        + 承诺的意思
        + 作用
          => Promise主要是用来解决回调地狱的问题
        + 使用
          => new Promise()
        + 参数
          => 回调函数
        + 回调函数参数
          => resolve 表示成功时的函数
          => reject 表示失败时的函数
        + resolve函数执行
          => 对应的then()函数会执行
        + reject函数执行
          => 对应的catch()函数会执行
        + 注意点
          => resolve函数或者reject函数执行要根据具体的条件来进行判断的,不能两个一起执行
          => finally()方法无论成功还是失败都会执行
          => 一个方法后面点上另一个方法,把这种语法称之为链式调用
        + Promise三种状态
          => pending表示承诺进行时状态
          => fulfilled表示成功时状态
          => rejected表示失败时状态,失败时的状态需要手动抛出一个失败的静态方法
    let p = new Promise((resolve, reject)=>{
        // resolve('张')
        reject()
    })
    .then((name)=>{
        console.log(name, '承诺兑现了')
    })
    .catch(()=>{
        console.log('承诺失败')
        return Promise.reject()
    })
    .finally(()=>{
        console.log('你看我执行了没有')
    })
    console.log(p)

2.Promise的封装

    pAjax({url: 'http://localhost:2402/user/test1'})
    .then(res=>{
        console.log('这是第一个请求的结果:', res)
        return pAjax({url: 'http://localhost:2402/user/test2', params: {a: res}})
    })
    .then(res2=>{
        console.log('这是第一个请求的结果:', res2)
        return pAjax({url: 'http://localhost:2402/user/test3', params: {b: res2}})
    })
    .then(res3=>{
        console.log('这是第一个请求的结果:', res3)
    })

3.Promise静态方法

    // Promise.all() 所有的异步请求完成才执行的方法
    let result1 = service.get('/user/request1')
    let result2 = service.get('/user/request2')
    // Promise.all([result1, result2]).then(res=>{
    //     console.log(res)
    // })
​
    // Promise.race() 那个请求先回来就使用那个
    Promise.race([result1, result2]).then(res=>{
        console.log(res)
    })

三、asyn和await(回调地狱的终极解决方案,可以让代码写起来更为的优雅)

    async function fn(){
        let res = await pAjax({url: 'http://localhost:2402/user/test1'})
        console.log(res)
        let res2 = await pAjax({url: 'http://localhost:2402/user/test2', params: {a: res}})
        console.log(res2)
        let res3 = await pAjax({url: 'http://localhost:2402/user/test3', params: {b: res2}})
        console.log(res3)
    }
    fn()

四、axios

    axios.create()返回的是一个单例模式
    baseURL表示的是基准地址
    timeout表示请求超时时间(你自己规定请求如果超过多长时间没有回来,就超时)
    headers表示设置的请求头

1.添加请求拦截器

    service.interceptors.request.use(function (config) {
        // 在发送请求之前做些什么
        // 一般会在请求拦截器这里携带token
        let token = 'abc123'
        // 如果存在token信息,那么就发送请求的时候携带给后端
        if(token){
            config.headers = {'authorization': token}
        }
        // 注意点:如果不return config那么请求不会放行
        return config;
    }, function (error) {
        // 对请求错误做些什么
        return Promise.reject(error);
    });

2.添加相应拦截器

    service.interceptors.response.use(function (response) {
        // 2xx 范围内的状态码都会触发该函数。
        // 对响应数据做点什么
        return response.data;
    }, function (error) {
        // 超出 2xx 范围的状态码都会触发该函数。
        // 对响应错误做点什么
        return Promise.reject(error);
    });

五、try和catch

try catch 用来处理异常,把可能出问题的代码放在try里面,一般是吧请求放在try里面,因为请求如果由于某些原因报错了,不会影响后续代码的执行

    try{
        const a = 10
        a = 20
    }catch{
        console.log('hello')
    }

能在后头抛出一个错误,但不会影响后续代码

    console.error('哈哈,你出错了')
    console.log('我是张,大聪明!')

在后台抛出一个错误,会影响后续代码

    throw Error('哈哈')
    console.log('我是张,大聪明!')

六、链式调用原理

    function Person(name){
        this.name = name
    }
    Person.prototype.say = function(){
        console.log(this.name + '喜欢演讲!')
        return this
    }
    Person.prototype.play = function(){
        console.log(this.name + '喜欢晚上去公园里偶遇!')
    }
​
    new Person('张')
    .say()
    .play()

标签:console,请求,res,user,学习,HarmonyOS,Promise,关于,log
From: https://blog.csdn.net/m0_72035166/article/details/142462652

相关文章

  • 关于HarmonyOS的学习
    day36一、可选链和空集合并符1.?  //?作用:1、三目运算符2、可选链  constobj={    id:1,    //info:{    //  name:'张',    //  age:18    //} }  console.log(obj.id)  cons......
  • Java中集合泛型的学习
    集合遍历目录集合遍历泛型的基本概念泛型的好处泛型的使用1.泛型类2.泛型接口3.泛型方法Java集合框架中的泛型泛型通配符Java集合泛型是JavaSE1.5(Java5)中引入的一个重要特性,它允许在定义类、接口和方法时指定一个或多个类型参数。这些类型参数在实例化或调用时会被具体的......
  • prometheus学习笔记之集群内服务发现环境准备
    一、环境介绍主要演示prometheus在k8s集群中如何通过服务自动去发现k8s集群自有服务及其他服务发现场景,后续会演示集群外部署prometheus自动发现k8s服务并获取数据创建监控使用的namespaceskubectlcreatensmonitoring配置docker可以下载镜像[root@k8s-masterdeploy]#cat/etc/......
  • prometheus学习笔记之PromQL
    一、PromQL语句简介官方文档:https://prometheus.io/docs/prometheus/latest/querying/basics/Prometheus提供⼀个函数式的表达式语⾔PromQL(PrometheusQueryLanguage),可以使⽤户实时地查找和聚合时间序列数据,表达式计算结果可以在图表中展示,也可以在Prometheus表达式浏览器中以......
  • prometheus学习笔记之Grafana安装与配置
    一、Grafana简介grafana是⼀个可视化组件,⽤于接收客户端浏览器的请求并连接到prometheus查询数据,最后经过渲染并在浏览器进⾏体系化显示,需要注意的是,grafana查询数据类似于zabbix⼀样需要⾃定义模板,模板可以⼿动制作也可以导⼊已有模板。Grafana的基础架构主要包括以下几个核心组......
  • prometheus学习笔记之简介与安装
    一、prometheus简介1.简介Prometheus是基于go语⾔开发的⼀套开源的监控、报警和时间序列数据库的组合,是由SoundCloud公司开发的开源监控系统,Prometheus于2016年加⼊CNCF(CloudNativeComputingFoundation,云原⽣计算基⾦会),2018年8⽉9⽇prometheus成为CNCF继kubernetes之后......
  • 学习docker后的个人理解
    一、什么是dockerDocker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源。可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,它将软件组件包装成一个完整的标准化单元,其中包含所有要运行的内容......
  • 量化交易学习日记8-大单净额进阶(张江高科为例)
    说明大单净额是反应主力的动向,这没错,可是,成交额多少算大单?之前写的大单净额功能我自己测试了一下,拿庄股张江高科建仓的阶段举个例子:可以看到,不管是大单净额(门槛是25万)还是全资金流向,流出都是惊人的,可是,建仓阶段不应该是主力进入的过程吗,我对该股进行过长期跟踪,这是一......
  • 关于 .NET Core WebAPI 中构建一个百万级高性能、低延迟的大型聊天系统
    在.NETCoreWebAPI中构建一个百万级高性能、低延迟的大型聊天系统,需要结合多种技术和架构设计。以下是实现此类系统所需的关键技术、架构和优化策略:1.高效的通信协议和技术SignalR:如果你想要在.NETCore中实现一个基于WebSocket的实时通信系统,SignalR是一个非常好的......
  • golang学习笔记13-函数(二):init函数,匿名函数,闭包,defer
    注:本人已有C,C++,Python基础,只写本人认为的重点。这个知识点基本属于go的特性,比较重要,需要认真分析。一、init函数每个文件都可以定义init函数,它会在main函数执行前被调用,无论它的定义位置是在main后还是前。而全局变量的优先级又高于init,所以优先级是这样的:全局变量>init......