当前位置: 首页 > article >正文

空安全-模块-并发

空安全-模块-并发

默认情况下,ArkTS中的所有类型都是不可为空的,因此类型的值不能为空。这类似于TypeScript的严格空值检查模式(strictNullChecks),但规则更严格。

非空断言运算符后缀运算符!可用于断言其操作数为非空。应用于可空类型的值时,它的编译时类型变为非空类型。例如,类型将从T | null更改为T:

空值合并运算符空值合并二元运算符??用于检查左侧表达式的求值是否等于null或者undefined。如果是,则表达式的结果为右侧表达式;否则,结果为左侧表达式。

空安全
export  class A{
  a:number=0
}
 export  function  fc(aa:A|null){
  //console.log(`${aa!.a}`)
  console.log(`${aa!.a}`)//可选链
}
 export  function  hb(str:string|null){
 // return (str!=null && str!=undefined)?str:'ads'
   return str  ?? 'ads'
}
模块

程序可划分为多组编译单元或模块。每个模块都有其自己的作用域,即,在模块中创建的任何声明(变量、函数、类等)在该模块之外都不可见,除非它们被显式导出。与此相对,从另一个模块导出的变量、函数、类、接口等必须首先导入到模块中。导出可以使用关键字export导出顶层的声明。未导出的声明名称被视为私有名称,只能在声明该名称的模块中使用。注意:通过export方式导出,在导入时要加{}。

如果在异步函数中,可以使用let module = await

 let  p1=new Promise((resolve,reject)=>{
            //生成随机数,小于0.5失败,大于0.5成功
            let num=Math.random()
            if(num<0.5){
                reject('小于0.5')
            }else{
                resolve('成功'+num)
            }
        })
          p1
        .then(data=>{
            console.log(data);
            
        })
        .catch(err=>{
            console.log(err);
        })
        .finally(()=>{
            console.log('最终执行');
            
        })
并发

异步并发 (Promise和async/await)Promise和async/await提供异步并发能力,是标准的JS异步语法。异步代码会被挂起并在之后继续执行,同一时间只有一段代码执行,适用于单次I/O任务的场景开发,例如一次网络请求、一次文件读写等操作。无需另外启动线程执行。异步语法是一种编程语言的特性,允许程序在执行某些操作时不必等待其完成,而是可以继续执行其他操作。

 p2
        .then(data=>{
            console.log(data)
            // 下一个要执行的异步操作
            return new Promise((r,j)=>{
            setTimeout(() => {
                r(Math.random())
            }, 1000);
        })
        },
        err=>{//处理失败的
            console.log(err);
            
        }
    
    
    )
        .then(data=>{//接收的是上一个then的return的异步操作的结果
            console.log(data);
            
        })
        .catch(err=>{
            console.log(err);
            
        })

async/awaitasync/await是一种用于处理异步操作的Promise语法糖,使得编写异步代码变得更加简单和易读。通过使用async关键字声明一个函数为异步函数,并使用await关键字等待Promise的解析(完成或拒绝),以同步的方式编写异步操作的代码。async函数是一个返回Promise对象的函数,用于表示一个异步操作。在async函数内部,可以使用await关键字等待一个Promise对象的解析,并返回其解析值。如果一个async函数抛出异常,那么该函数返回的Promise对象将被拒绝,并且异常信息会被传递给Promise对象的onRejected()方法

 async function asy() {
            console.log('开始执行异步操作');

           try {
            let num1 = await p()
            console.log(num1);
            let num2 = await p()
            console.log(num2);
           } catch (error) {
            console.log(error)
           }
        }
        console.log('主线任务开始');
        asy()
        console.log('主线任务开始1');
        console.log('主线任务开始2');
        console.log('主线任务开始3');
        console.log('主线任务开始4');
        console.log('主线任务开始5');
        console.log('主线任务开始6');

http://www.kler.cn/a/408387.html

相关文章:

  • vue3【实战】响应式的登录界面
  • 文件操作详解(1)
  • 网络无人值守批量装机-cobbler
  • STL——string类常用接口说明
  • apache、iis屏蔽限制ip访问(适用虚拟主机)
  • NFS搭建
  • Go-protobuf consul注册备忘录
  • Ruby 模块(Module)
  • 智领未来: 宏集物联网HMI驱动食品与包装行业迈向智能化新高度
  • 【CSP CCF记录】201812-2第15次认证 小明放学
  • 数学建模学习(138):基于 Python 的 AdaBoost 分类模型
  • 【贪心算法-第三弹——Leetcode-179.最大数】
  • Python 虚拟环境使用指南
  • enumerate()
  • 【C++】类(五):构造函数再探
  • 【JavaEE初阶 — 网络原理】初识网络原理
  • 【教学类-18-05】20241118正方形手工纸(蒙德里安-风格派-红黄蓝黑白)
  • kafka进阶_3.消费消息
  • STM32F10x 定时器
  • Linux之SELinux与防火墙
  • Linux无sudo权限将zsh作为默认shell
  • BOM的详细讲解
  • 【卷积神经网络;深度学习;滑坡检测;遥感|论文解读1】滑坡检测特征增强框架——AMU-Net
  • 什么是 WPF 中的依赖属性?有什么作用?
  • 什么是Axios,有什么特点
  • 单机部署kubernetes环境下Overleaf-基于MicroK8s的Overleaf应用部署指南