鸿蒙ArkTs干货!!!异步和同步怎么理解?async/await的介绍和宝藏用法(特别通俗易懂)

想必,大家在同步与异步之间存在一些疑惑,今天我就带大家用我自己的大白话,来进行详细的解说,希望对大家有帮助!

在了解同步与异步直接的知识时,咱们需要先了解以下几个方面

目录

异步和同步怎么理解?

处理异步的操作方式:

在同步方法中我们需要使用异步数据,如果不加async/await的后果是什么?


异步和同步怎么理解?

为什么要有异步和同步呢?为什么不能放在一个线程中。咱们有异步是为了避免主线程的堵塞。

举个例子:咱们在大马路上人流量多的地方是不是都不希望堵车,因为堵车会导致时间长,交通堵塞。那么咱们在生活中是不是解决方法就是多修几条马路。那样是不是就可以避免车全在一条马路上的问题了。

这样大家就可以把它结合到我们的异步和同步来讲,我们异步就相当于给主线程再去开一条新的道路,那样就可以避免主线程堵塞,也可以避免耗时。好啦,现在了解异步和同步,那么咱们开始了解处理异步的操作方式。

处理异步的操作方式:

async/await是一种处理异步操作的方式。切记,async/await要结合起来使用,不可以拆分。

看起来很像是同步代码的异步函数,但是这样代码的流程更加自然,容易理解。

await 的英文意思是不是等待,它可以暂停异步函数的执行直到异步操作完成,然后恢复执行。

async/await的好处就是可以控制异步操作的顺序,咱们可以按顺序执行,也可以在所有操作完成之后咱们在执行后续的代码。所以就具有很强的灵活性。

在同步方法中我们需要使用异步数据,如果不加async/await的后果是什么?

这里咱们先引用一个Promise对象,它是一种处理异步操作的对象,它包含了三个方法,

then(): 接收两个参数,第一个参数是 Promise 成功时的回调函数,第二个参数是可选的失败回调函数。
.catch(): 处理 Promise 失败的情况。
.finally(): 无论 Promise 成功还是失败都会执行的回调函数。

知识点来了!!!如果你尝试在同步代码中直接调用一个返回Promise的异步函数而不使用async/await,那么你实际上并不会等到异步操作完成,也不会接收到异步操作的结果。会得到一个没有解决的Promise实例。那样咱们就获取不到真正想要获取的值,而是一个Promise对象。

为什么会出现这种情况,原因是:因为异步函数立即返回一个Promise,而这个Promise在将来某个时刻(当异步操作完成时)才会解析为一个值。如果你不使用async/await或Promise的.then()方法来等待这个结果,你将无法在同步代码中直接访问到这个结果

function getAsyncData() {
    return new Promise(resolve => {
        setTimeout(() => {
            resolve('Async Data');
        }, 1000);
    });
}

function syncFunction() {
    const data = getAsyncData();
    console.log(data); // 输出的是一个Promise对象,而不是'Async Data'
}

syncFunction();

在这个代码中,getAsyncData函数返回一个Promise,这个Promise在1秒后解析为字符串'Async Data'。然而,当你在syncFunction中调用getAsyncData时,你立刻得到了一个Promise实例,而不是最终的字符串值。由于你没有使用async/await或.then()来等待Promise解析,所以console.log(data)实际上输出的是Promise对象本身,而不是你期望的异步数据

async function syncFunction() {
    const data = await getAsyncData();
    console.log(data); // 输出的是'Async Data'
}

syncFunction();
function syncFunction() {
    getAsyncData().then(data => {
        console.log(data); // 输出的是'Async Data'
    });
}

syncFunction();

这两种情况,第一种是用async/await,第二种是Promise的.then()方法。在这两种情况下,你都能够正确地访问到异步操作的结果,而不是仅仅得到一个未解析的Promise。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值