我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Vue中的同步调用和异步调用怎么实现

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Vue中的同步调用和异步调用怎么实现

这篇“Vue中的同步调用和异步调用怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Vue中的同步调用和异步调用怎么实现”文章吧。

Vue的同步调用和异步调用

Promise实现异步调用

异步调用,增加a、b两个方法,并在mounted中调用。 观察客户端,并没有按照方法执行的顺序输出,使用Promise实现了异步调用。

Vue中的同步调用和异步调用怎么实现

观察客户端,并没有按照方法执行的顺序输出,使用Promise实现了异步调用。

async /await方法实现同步调用

使用async 和 await配合promise也可以实现同步调用,nuxt.js中使用async/await实现同步调用效果

Vue中的同步调用和异步调用怎么实现

观察服务端控制台发现是按照a,b的调用顺序输出1,2,使用async/await实现了同步调用。

Vue同步和异步的问题

之所以想到写这个问题是因为在工作中遇到一些相关的问题,最后用ES7的async-await 来解决这个问题。话不多述 ,进正题。

基本语法

async functionbasicDemo() {    let result = await Math.random();    console.log(result);}basicDemo();// 0.6484863241051226//Promise {[[PromiseStatus]]: "resolved", [[PromiseValue]]: undefined}

上述代码就是async-await的基本使用形式。有两个陌生的关键字async、await,同时函数执行结果似乎返回了一个promise对象。

  • async

async functiondemo01(){    return 123;}demo01().then(val=> {    console.log(val);// 123});

若 async 定义的函数有返回值,return 123;相当于Promise.resolve(123),没有声明式的 return则相当于执行了Promise.resolve();

  • await

await 可以理解为是 async wait 的简写。await 必须出现在 async 函数内部,不能单独使用。

functionnotAsyncFunc(){    await Math.random();}notAsyncFunc();//Uncaught SyntaxError: Unexpected identifier

await 后面可以跟任何的JS 表达式。虽然说 await 可以等很多类型的东西,但是它最主要的意图是用来等待 Promise 对象的状态被 resolved。如果await的是 promise对象会造成异步函数停止执行并且等待 promise 的解决,如果等的是正常的表达式则立即执行。

functionsleep(second){    return new Promise((resolve, reject) => {        setTimeout(()=> {            resolve(' enough sleep~');        }, second);    })}functionnormalFunc(){    console.log('normalFunc');}async functionawaitDemo(){    await normalFunc();    console.log('something, ~~');    let result = await sleep(2000);    console.log(result);// 两秒之后会被打印出来}awaitDemo()

希望通过上面的 demo,大家可以理解我上面的话。

实例

举例说明啊,你有三个请求需要发生,第三个请求是依赖于第二个请求的解构第二个请求依赖于第一个请求的结果。若用 ES5实现会有3层的回调,若用Promise 实现至少需要3个then。一个是代码横向发展,另一个是纵向发展。今天指给出 async-await 的实现哈~

我们仍然使用 setTimeout 来模拟异步请求

functionsleep(second, param){    return new Promise((resolve, reject) => {        setTimeout(()=> {            resolve(param);        }, second);    })}async functiontest(){    let result1 = await sleep(2000, 'req01');    let result2 = await sleep(1000, 'req02' + result1);    let result3 = await sleep(500, 'req03' + result2);    console.log(`${result3}${result2}${result1}`);}test();

错误处理

上述的代码好像给的都是resolve的情况,那么reject的时候我们该如何处理呢?

functionsleep(second){    return new Promise((resolve, reject) => {        setTimeout(()=> {            reject('want to sleep~');        }, second);    })}async functionerrorDemo(){    let result = await sleep(1000);    console.log(result);}errorDemo();// VM706:11 Uncaught (in promise) want to sleep~// 为了处理Promise.reject 的情况我们应该将代码块用 try catch 包裹一下async functionerrorDemoSuper(){    try {        let result = await sleep(1000);        console.log(result);    } catch (err) {        console.log(err);    }}errorDemoSuper();// want to sleep~

小心你的并行处理!!!

我这里为啥加了三个感叹号呢~,因为对于初学者来说一不小心就将 ajax 的并发请求发成了阻塞式同步的操作了,我就真真切切的在工作中写了这样的代码。await 若等待的是 promise 就会停止下来。业务是这样的,我有三个异步请求需要发送,相互没有关联,只是需要当请求都结束后将界面的 loading 清除掉即可。 刚学完 async await 开心啊,到处乱用~

functionsleep(second){    return new Promise((resolve, reject) => {        setTimeout(()=> {            resolve('request done! ' + Math.random());        }, second);    })}async functionbugDemo(){    await sleep(1000);    await sleep(1000);    await sleep(1000);    console.log('clear the loading~');}bugDemo();

loading 确实是等待请求都结束完才清除的。但是你认真的观察下浏览器的 timeline 请求是一个结束后再发另一个的(若观察效果请发真实的 ajax 请求)

那么,正常的处理是怎样的呢?

async functioncorrectDemo(){    let p1 = sleep(1000);    let p2 = sleep(1000);    let p3 = sleep(1000);    await Promise.all([p1, p2, p3]);    console.log('clear the loading~');}correctDemo();// clear the loading~

以上就是关于“Vue中的同步调用和异步调用怎么实现”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Vue中的同步调用和异步调用怎么实现

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Vue中的同步调用和异步调用怎么实现

这篇“Vue中的同步调用和异步调用怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Vue中的同步调用和异步调用怎么实现
2023-06-28

C#中怎么实现同步调用和异步调用

今天就跟大家聊聊有关C#中怎么实现同步调用和异步调用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。C#委托的Invoke方法用来进行同步调用。同步调用也可以叫阻塞调用,它将阻塞当前线
2023-06-17

Vue中的同步和异步调用顺序是什么

今天小编给大家分享一下Vue中的同步和异步调用顺序是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Vue的同步和异步调用
2023-06-28

VB.NET中怎么实现异步调用

这篇文章给大家介绍VB.NET中怎么实现异步调用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。VB.NET异步调用代码示例:private delegate Sub (()sub (or Function )()fu
2023-06-17

WCF中怎么实现异步调用

这篇文章将为大家详细讲解有关WCF中怎么实现异步调用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。随着时代的发展,异步调用在编程中是不可缺少的,这里就关于WCF异步调用简单的和大家分享一下吧
2023-06-17

C#中怎么实现异步调用

C#中怎么实现异步调用,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。首先,C#异步调用出来的新线程,必须回收,不回收是浪费资源的可耻行为,.NET也是不允许的,所以你别想钻
2023-06-17

java异步调用怎么实现

在Java中,可以通过多线程、回调接口、Future和CompletableFuture等方式来实现异步调用。1. 多线程:创建一个新的线程,在新线程中执行耗时操作,然后通过线程间的通信机制(如wait()和notify())将结果返回给主
2023-09-16

java怎么实现异步调用

在Java中,可以使用多种方法实现异步调用,下面列举了其中的两种常用方式:使用线程池:可以使用Java中的`ExecutorService`来创建线程池,然后使用`submit`方法提交一个任务给线程池执行,并使用`Future`对象获取异
2023-10-25

Java中使用同步回调和异步回调的示例详解

这篇文章主要介绍了Java中使用同步回调和异步回调的相关资料,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2023-05-16

Python中怎么实现同步和异步

Python中怎么实现同步和异步,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、同步与异步#同步编程(同一时间只能做一件事,做完了才能做下一件事情) <-a
2023-06-17

C#中如何实现异步调用

C#中如何实现异步调用,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。.NET Framework 允许您C#异步调用任何方法。定义与您需要调用的方法具有相同签名
2023-06-17

Java中如何实现异步调用

Java中如何实现异步调用,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。@Test一、创建线程public void test0() throws Exception { S
2023-06-02

ASP.NET中怎么实现异步回调

ASP.NET中怎么实现异步回调,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。ASP.NET异步回调的重要性:在实际开发中,ASP.NET 客户端异步回调技术才是王道。下面我们
2023-06-17

C#中怎么利用委托实现异步调用

这篇文章将为大家详细讲解有关C#中怎么利用委托实现异步调用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。委托实现C#异步调用的步骤:1.定义委托。2.将要进行异步调用的方法“实例化”到定义的
2023-06-17

怎么实现JavaScript异步回调

这篇文章主要讲解了“怎么实现JavaScript异步回调”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么实现JavaScript异步回调”吧!什么是异步回调?异步回调是指在执行一个任务时,
2023-07-06

golang异步回调怎么实现

在Go语言中,可以使用goroutine和channel来实现异步回调的功能。首先,我们可以创建一个goroutine来执行异步的操作。在goroutine中,我们可以执行一些耗时的操作,然后将结果发送到一个channel中。下面的示例
2023-10-25

python异步回调怎么实现

在Python中,可以使用asyncio模块来实现异步回调。asyncio是Python 3.4及以上版本内置的异步IO框架。下面是一个简单的示例,演示了如何使用异步回调实现并发执行多个任务:import asyncio# 定义一个异步
python异步回调怎么实现
2024-02-29

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录