首页 > 编程语言 >Java登陆第四十一天——Promise、async关键字、await关键字

Java登陆第四十一天——Promise、async关键字、await关键字

时间:2024-04-08 18:35:05浏览次数:27  
标签:Java 函数 await console 第四十一 关键字 Promise promise log

在学习axios之前,需要学习ES6提供的Promise对象。

普通函数和回调函数

学习Promise的预备知识,回调函数

普通函数

普通函数: 正常调用的函数,普通函数执行完毕后才会继续执行下一行代码。

按照编码顺序执行。

function f1() {
      console.log("普通函数f1执行");
}

function f2() {
      console.log("普通函数f2执行");
}
f1();
f2();

控制台输出

普通函数f1执行
普通函数f2执行

回调函数

回调函数: 一些特殊的函数,表示未来才会执行的一些功能,后续的代码不会等待该函数执行完毕。

不一定按照编码顺序执行。

function f1() {
      console.log("普通函数f1执行");
}

function f2() {
      console.log("普通函数f2执行");
}
function other() {
//JS原生的定时器就是一个回调函数 setTimeout(回调函数,毫秒)
  setTimeout(function () {
       console.log("回调函数执行")
     },2000);
      console.log("other函数内其他代码")
}
other();//尽管回调函数第一个运行。
f1();
f2();

控制台输出

other函数内其他代码
普通函数f1执行
普通函数f2执行
回调函数执行

从结果不难发现,other方法内部的回调函数最后才输出。

Promise对象

前端中的异步编程技术,类似Java中的多线程+线程结果回调。

一图了解Promise

image
Promise在英语中,就是承诺的意思。

  • 所谓Promise:

    • 简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。

    • 从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。

    • Promise 提供统一的 API,各种异步操作都可以用同样的方法进行处理。

语法

//使用构造函数,创建Promise实例。
new Promise(function(resolve,reject){})
new Promise( (resolve,reject)=>{} )

//传参 resolve,是一个函数,设置当前Promise对象的状态为已完成
resolve()
resolve("可以传递参数")

//传参 reject,是一个函数,设置当前Promise对象的状态为已失败
reject()
reject("可以传递参数")

Promise类常用函数。

函数 描述
Promise.then(f1,f2) 用于处理Promise状态的回调函数。f1是成功,f2是失败
Promise.then(回调函数) 专门处理Promise成功状态的回调函数。
Promise.catch(回调函数) 专门处理Promise失败状态的回调函数。

若then只有一个回调函数,那就专门处理Promise成功状态。

以上函数返回值都是Promise对象,所以可以链式调用。

Promise.then(...).catch(...);

Promise.then()举例

function f1() {
    console.log("普通函数f1执行");
}

function f2() {
    console.log("普通函数f2执行");
}

let promise = new Promise((resolve, reject) => {
    console.log("回调函数运行中---");
    resolve();//设置状态为已完成
})
promise.then(
    function success(data) {//data可省,主要看resolve()有没有传递参数
        console.log("Promise状态是已完成" + data)
    },
    function fail(data) {//data可省,主要看reject()有没有传递参数
        console.log("Promise状态是已失败" + data)
    }
)
console.log("then在这里会等待promise中的运行结果,但是不会阻塞代码继续运行")
f1();
f2();

控制台输出

回调函数运行中---
then在这里会等待promise中的运行结果,但是不会阻塞代码继续运行
普通函数f1执行
普通函数f2执行
Promise状态是已完成undefined

async和await关键字

ES6同时提供了async和await关键字,可以更方便操作Promise对象。

被async关键字声明的方法,称为异步函数
await关键字必须在异步函数内使用。

语法

/*

*/
async function fun(){}


/*

*/
await Promise();

async特点

被async关键字声明的方法,称为异步函数。

异步函数的返回值,必然是promise对象。

  1. 如果返回值是一个promise对象,该promise对象的状态就是异步函数返回的promise对象状态。

  2. 如果返回值是一个异常,异步函数会返回一个已失败的promise对象

  3. 如果返回值是一个非promise对象,异步函数会返回一个已完成的promise对象,该promise对象的值就是这个非promise对象。

await特点

await关键字必须在异步函数内使用

await必须修饰一个Promise对象。

  1. await默认返回的promise对象已完成的值

  2. 后续代码会等待await的执行结果

  3. 若await修饰的promise对象是已失败状态,就会抛出异常

async和await关键字举例

function f1() {
    console.log("普通函数f1执行");
}

function f2() {
    console.log("普通函数f2执行");
}

/*等价于
function pro(){
  let promise = new Promise((resolve, reject) => {
    resolve(10);//设置状态为已完成
    })
  return promise;
}
*/
async function pro() {
    console.log("pro1开始执行")
    return 10;//详情async第三点。
}

async function pro2() {
    console.log("pro2开始执行")
    let numberPromise = await pro();//取出成功状态的promise的值,详情await第一点。
    console.log("await下面的代码会等待await的执行结果")
    console.log("pro已执行完毕,await关键字取出promise对象的值为" + numberPromise);

}

pro2();
f1();
f2();

控制台输出

pro2开始执行
pro1开始执行
普通函数f1执行
普通函数f2执行
await下面的代码会等待await的执行结果
pro已执行完毕,await关键字取出promise对象的值为10

标签:Java,函数,await,console,第四十一,关键字,Promise,promise,log
From: https://www.cnblogs.com/rowbed/p/18122247

相关文章

  • 常用Java代码混淆工具介绍及比较
     ......
  • java中的基准测试框架JMH
    JHM是openJDK开发的一个benchmark框架。它是一个Maven依赖,所以创建一个Maven项目,引入下面两个依赖:<dependency><groupId>org.openjdk.jmh</groupId><artifactId>jmh-core</artifactId><version>1.37</version></dependency&g......
  • Java实现Fast DFS、服务器、OSS上传
    支持FastDFS、服务器、OSS等上传方式介绍在实际的业务中,可以根据客户的需求设置不同的文件上传需求,支持普通服务器上传+分布式上传(FastDFS)+云服务上传OSS(OSS)软件架构为了方便演示使用,本项目使用的是前后端不分离的架构前端:Jquery.uploadFile后端:SpringBoot前期准备:F......
  • JavaScript学习 BOM操作
    BrowserObjectModel(BOM) 是一套专为与浏览器交互而设计的API,它允许JavaScript访问和操纵浏览器窗口以及浏览器本身的相关特性。以下是对BOM主要对象及其操作的详细讲解:1.Window对象Window对象 是BOM的核心,它代表浏览器窗口,并且是JavaScript全局对象。这意味着所有全局......
  • JAVA------基础篇
    java基础1.JDKJDK:javadevelopmentkitJRE:javaruntimeenvironmentJDK包含JREjava跨平台:因为java程序运行依赖虚拟机,虚拟机需要有对应操作系统的版本,而jre中有虚拟机。当你想要在Linux系统下运行,则需要安装对应的虚拟机,及对应的jdk版本,而对应的jdk版本中的jre有对......
  • JAVA------基础篇
    java基础1.JDKJDK:javadevelopmentkitJRE:javaruntimeenvironmentJDK包含JREjava跨平台:因为java程序运行依赖虚拟机,虚拟机需要有对应操作系统的版本,而jre中有虚拟机。当你想要在Linux系统下运行,则需要安装对应的虚拟机,及对应的jdk版本,而对应的jdk版本中的jre有对......
  • Java-异常机制处理
     packagecom.it;importjava.util.regex.Matcher;importjava.util.regex.Pattern;publicclassTest01{publicstaticvoidmain(String[]args){test03();}publicstaticvoidtest01(){System.out.println("111");......
  • Java内存模型与可见性:volatile关键字、内存屏障与原子操作 第一章
    目录一、引言1.1定义Java内存模型(JMM)及其在并发编程中的重要性1.2简述可见性问题及其对程序正确性的影响二、Java内存模型概述2.1JMM的基本概念:主内存、工作内存、数据同步与一致性保证2.2JMM的特性:原子性、可见性、有序性2.3并发环境下常见的内存可见性问题示例......
  • WPS二次开发系列:Gradle版本、AGP插件与Java版本的对应关系
    背景最近有体验SDK的同学反馈接入SDK出现报错,最终定位到原因为接入的宿主app项目的gradle版本过低导致,SDK兼容支持了android11的特性,需要对应的gradle插件为支持android11的版本。现象解决方案将gradle版本升级至支持android11的插件版本即可,对此google官方的引文如下......
  • Java 在线反编译工具
    第一个:http://www.javadecompilers.com/该站点提供了一个用户界面,用于从.class和.jar'二进制'文件中提取源代码。推荐选择编译器:Procyonopen-source,https://bitbucket.org/mstrobel/procyon/wiki/JavaDecompilerAuthor:MikeStrobelUpdatedin2015.Handleslanguage......