前端面试题(一) promise和async/await区别

2023-11-05


拓展:js中同步、异步
js的同步和异步问题通常是指ajax的回调,如果是同步调用,程序在发出ajax调用后就会暂停,直到远程服务器产生回应后才会继续运行。而如果是异步调用,程序发出ajax调用后不会暂停,而是立即执行后面的代码,服务器返回信息后会自动触发回调函数进行处理。相比较而言,异步调用的性能最佳,程序不会出现卡顿的现象,而同步调用则通常用于需要立即获得结果并实时处理的情况。

promise的用法

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

基本语法:

 let p = new Promise((resolve,reject) => {
        //...
        resolve('success')
    });
    
    p.then(result => {
        console.log(result);//success
    });

promise共有三个状态

pending(执行中)、resolve(成功)、rejected(失败)

链式调用

错误捕获

Promise.prototype.catch用于指定Promise状态变为rejected时的回调函数,可以认为是.then的简写形势,返回值跟.then一样

`let p = new Promise((resolve,reject) => {
    reject('error');
});

p.catch(result => {
    console.log(result);
})`

async、await

简洁:异步编程的最高境界就是不关心它是否是异步。async、await很好的解决了这一点,将异步强行转换为同步处理。
async/await与promise不存在谁代替谁的说法,因为async/await是寄生于Promise,Generater的语法糖。

用法

async用于申明一个function是异步的,而await可以认为是async wait的简写,等待一个异步方法执行完成。
规则:
1 async和await是配对使用的,await存在于async的内部。否则会报错
2 await表示在这里等待一个promise返回,再接下来执行
3 await后面跟着的应该是一个promise对象,(也可以不是,如果不是接下来也没什么意义了…)

写法:
`async function demo() {
let result01 = await sleep(100);
//上一个await执行之后才会执行下一句
let result02 = await sleep(result01 + 100);
let result03 = await sleep(result02 + 100);
// console.log(result03);
return result03;
}

demo().then(result => {
    console.log(result);
});`

错误捕获

如果是reject状态,可以用try-catch捕捉

let p = new Promise((resolve,reject) => {
    setTimeout(() => {
        reject('error');
    },1000);
});

async function demo(params) {
    try {
        let result = await p;
    }catch(e) {
        console.log(e);
    }
}

demo();

区别:

1 promise是ES6,async/await是ES7
2 async/await相对于promise来讲,写法更加优雅
3 reject状态:
    1)promise错误可以通过catch来捕捉,建议尾部捕获错误,
    2)async/await既可以用.then又可以用try-catch捕捉

如有问题请联系我~

欢迎加入QQ群:
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

前端面试题(一) promise和async/await区别 的相关文章

随机推荐

  • RuntimeWarning: divide by zero encountered in log错误解决

    问题描述 最近在学习 机器学习实战 这本书时 朴素贝叶斯那里遇到了这样的问题 def train native bayes train matrix train category num train docs len train matri
  • java并发(二)--.JMM内存模型对并发的保障

    2 JMM内存模型 1 计算机结构 输入设备 就是我们的鼠标 键盘 存储器 对应的就是我们的内存 缓存 运算器和控制器共同组成了cpu 而输出设备就比如显示屏 打印机 我们重点来聊一下缓存 2 缓存 其实 当我们说计算机运行效率低下 速度慢
  • 拓端tecdat

    最近我们被要求撰写关于ARIMA ARCH的研究报告 包括一些图形和统计输出 时间序列分析模型 ARIMA ARCH GARCH模型分析股票价格数据 相关视频 在Python和R语言中建立EWMA ARIMA模型预测时间序列 简介 时间序列
  • 初学者的卡尔曼滤波——扩展卡尔曼滤波(一)

    简介 已经历经了半个世纪的卡尔曼滤波至今仍然是研究的热点 相关的文章不断被发表 其中许多文章是关于卡尔曼滤波器的新应用 但也不乏改善和扩展滤波器算法的研究 而对算法的研究多着重于将卡尔曼滤波应用于非线性系统 为什么学界要这么热衷于将卡尔曼滤
  • 文化的特点计算机,计算机文化基础 计算机的特点与分类 计算机特点与分类.pptx...

    1 4 3计算机的特点和分类 精确性高 计算机的可靠性很高 差错率极低 一般来讲只是在人工介入的地方才有可能发生错误 存储容量大 计算机的存储性是计算机区别于其他计算工具的重要特征 存储器不但能够存储大量的信息 而且能够快速准确地存入或取出
  • SQL分类及通用语法&&数据类型(超详细版)

    一 SQL分类 SQL是结构化查询语言 Structured Query Language 的缩写 它是一种用于管理和操作关系型数据库系统的标准化语言 SQL分类如下 DDL 数据定义语言 用来定义数据库对象 数据库 表 字段 DML 数据
  • 初入vue:子组件接收props值并需要对这个值进行修改的解决办法

    vue 子组件接收props值并需要对这个值进行修改的解决办法 最进刚刚从微信小程序转过来 发现了vue与其有很大的相似之处 相比之下vue确实是方便了很多 特别是vue的 双向绑定 对于组件的话vue方面限制了子组件对父组件穿来的值的修改
  • 用虚拟串口进行串口调试

    由于现在的笔记本电脑一般不带有串口 再进行串口调试时 可以用虚拟串口代替 虚拟串口下载链接 虚拟串口 Win7 下载 串口调试助手下载链接 串口调试助手 VS2010串口程序 使用的unicode库 纯API 不利用Mscomm控件 下载链
  • bulk interface驱动_USB驱动程序(较详细)一

    拓扑结构上 一个 USB 子系统并不是以总线的方式来分布 它是一棵由几个点对点连接构成的树 这些连接是连接设备和集线器的4线电缆 地 电源 和 2 个差分信号线 如同以太网的双绞线 USB主控制器负责询问每个USB设备是否有数据需要发送 由
  • ‘VB6EXT.OLB’ could not be registered

    打开VB6提示 VB6EXT OLB could not be registered 解决办法 用管理员打开 实测可行 参考 VB6 Error please help VBForums
  • el-select-dropdown 修改下拉框的样式

    问题描述 使用el select的时候有时候需要修改下拉框的样式 但是el select dropdown必须添加类名才能修改他的样式 问题解决 1 popper class element提供了为下拉框绑定类名的api 绑定类名之后使用
  • 利用python在网上接单赚钱,兼职也能月入过万,还不赶紧学起来

    看完这篇回答至少给你省去95 找答案的时间 我觉得python接单我是最有发言权的 从2016年进入大学 我就是一个不安分的学生 总是想着通过自己的技术来实现财富自由 我崇拜雷军 我觉得雷布斯不仅技术强 而且很有商业头脑 可是我是个呆呆的瓜
  • PID控制原理解释

    PID控制原理解释 文章目录 PID控制原理解释 0 前言 1 控制原理图解释 2 算法分析 3 PID数学模型解释 4 调参技巧说明 0 前言 参考网址 http blog gkong com liaochangchu 117560 as
  • Python 之os.walk()方法

    os walk方法 主要用来遍历一个目录内各个子目录和子文件 这个对于文件夹下遍历所有文件非常好用 对于数据处理也是很常见 os walk top topdown True nerr r None followlinks False 可以得
  • (转)关于Unity中的Input输入事件

    截获鼠标 键盘的消息 监听事件我们都是在Update里面监听的 Unity的虚拟轴打开 Edit gt Project Settings gt Input 打开的各个Name就是双引号里面要填的 记不住就打开查 也可以自己定义一些按键 一
  • visual studio:VC版本号与VS对应关系

    参考 VC版本号与VS对应关系
  • java解压zip压缩包

    坐在旁边的小伙伴问我怎么用 java 将服务器上的压缩文件解压出来 我索性给他写了个 demo 也顺手记录一下 亲测可用 如果觉得有帮助 欢迎点赞 评论 收藏 转发 java 实现解压 zip 压缩包 package com yuhuofe
  • Python获取文件夹中所有路径+名称

    获取文件夹中所有路径 名称 import os img dir r home aistudio data train out file home aistudio data train image paths txt with open o
  • package.json 同时执行多个命令

    在 package json 的 scripts 字段中 我们可以通过在命令中使用 连接符来同时执行多个命令 具体写法如下 Copy Code scripts command1 echo Command 1 ls al command2 c
  • 前端面试题(一) promise和async/await区别

    promise和async await都是处理异步请求 promise的用法 基本语法 promise共有三个状态 链式调用 错误捕获 async await 用法 错误捕获 区别 拓展 js中同步 异步 js的同步和异步问题通常是指aja