【面试题】JS基础-异步

news2025/8/9 17:04:54

1. 异步

1.1 为什么要异步?

JS是单线程语言,只能同时做一件事。JS和DOM渲染共用同一个线程,因为JS可修改DOM结构。当遇到等待的情况时,例如网络请求、定时任务,程序不能卡住。所以需要异步来解决JS单线程等待的问题,异步通过回调callback函数的形式实现。

1.2 异步和同步

同步和异步的区别:异步不会阻塞代码执行,同步会阻塞代码执行。

  • 异步
// 异步(callback回调函数)
console.log(100)
setTimeout(()=>{
    console.log(200)
}, 1000)
console.log(300)

在这里插入图片描述

  • 同步
console.log(100)
alert(200)
console.log(300)

不点击弹框的 确认 按钮,就不会执行console.log(300)

2. 异步的应用场景

  • 网络请求,如ajax图片加载
// ajax
console.log('start')
$.get('./data1.json', function(data1){
	console.log(data1)
})
console.log('end')
// 图片加载
console.log('start')
let img = document.createElement('img')
img.onload = function(){
	console.log('loaded')
}
img.src = '/xxx.png'
console.log('end')
  • 定时任务,如setTimeout
// setTimeout
console.log(100)
setTimeout(function(){
	console.log(200)
}, 1000)
console.log(300)
// setInterval
console.log(100)
setInterval(function(){
	console.log(200)
}, 1000)
console.log(300)

3. promise的基本使用

3.1 promise可以解决callback hell的问题

在这里插入图片描述

function getData(url){
    return new Promise((resolve, reject) => {
        $.ajax({
            url,
            success(data){
                resolve(data)
            },
            error(err){
                reject(err)
            }
        })
    })
}

const url1 = '/data1.json'
const url2 = '/data2.json'
const url3 = '/data3.json'

// Promise的基本用法,管道串联的形式
getData(url1).then(data1=>{
    console.log(data1)
    return getData(url2)
}).then(data2=>{
    console.log(data2)
    return getData(url3)
}).then(data3=>{
    console.log(data3)
}).catch(err=>console.error(err))

3.2 手写Promise加载图片

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>手写Promise加载图片</title>
</head>

<body>
    <script>
        function loadImg(src) {
            const p = new Promise(
                (resolve, reject) => {
                    const img = document.createElement('img')
                    img.onload = () => {
                        resolve(img)
                    }
                    img.onerror = () => {
                        reject(new Error(`图片加载失败 ${src}`))
                    }
                    img.src = src
                }
            )
            return p;
        }

        const url1 = 'https://profile-avatar.csdnimg.cn/fb030a9b9de24f4ba6dd8cd6c094ffcf_zx1041561837.jpg!1'
        const url2 = 'https://img-home.csdnimg.cn/images/20201124032511.png'

        loadImg(url1).then(img1 => {
            console.log('图片1的宽度为:' + img1.width)
            return img1    // 普通对象
        }).then(img1 => {
            console.log('图片1的高度为:' + img1.height)
            return loadImg(url2)    // promise对象
        }).then(img2 =>{
            console.log('图片2的宽度为:' + img2.width)
            return img2
        }).then(img2 => {
            console.log('图片2的高度为:' + img2.height)
        }).catch(ex => console.error(ex))
    </script>
</body>
</html>

在这里插入图片描述

4. JS异步相关面试题

console.log(1)
setTimeout(function(){
    console.log(2)
}, 1000)
console.log(3)
setTimeout(function(){
    console.log(4)
}, 0)
console.log(5)

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/34077.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

学完Spring框架回头再来看反射你会发现真的不一样

文章目录前言一.什么是反射&#xff1f;二.如何实现反射&#xff1f;2.1java.lang.Class2.2通过反射创建对象2.3通过反射获取类成员三.反射的性能四.反射是如何破坏单例模式的&#xff1f;五.如何避免单例模式被反射破坏&#xff1f;前言 你还记得你的Spring入门案例吗&#x…

查询利器—索引

目录 索引的优缺点 常见索引分类 MySQL数据操作的宏观过程 认识磁盘 正式理解索引结构 采用B树的原因 聚簇索引与非聚簇索引 索引操作 索引创建原则 索引的优缺点 优点&#xff1a;提高一个海量数据的检索速度 缺点&#xff1a;查询速度的提高是以插入、更新、删除…

pdf生成:wkhtmltopdf

wkhtmltopdf是开源&#xff08;LGPLv3&#xff09;命令行工具&#xff0c;使用Qt WebKit渲染引擎将HTML渲染为PDF和各种图像格式。这些完全以“headless”模式运行&#xff0c;不需要显示或显示服务wkhtmltoimage。建议&#xff1a; 不要将wkhtmltopdf与任何不受信任的HTML一起…

sqli-labs/Less-61

这一关的欢迎界面提示我们尝试机会为5次 然后要以id为注入点 首先先判断一下是否为数字型 输入id1 and 12 回显如下 所以属于字符型 然后输入1 回显如下 出现了报错信息 说明可以进行报错注入 也说明了注入类型 佐证一下 输入一个1))--回显如下 这道题我还是使用报错注入 首…

使用Python查询国内 COVID-19 疫情

有时我们只是想要一个速的工具来告诉当前疫情的情况&#xff0c;我们只需要最少的数据。 使用Python语言和tkinter图形化显示数据。 首先&#xff0c;我们使用 Tkinter 库使我们的脚本可以图形化显示。 使用 requests 库从 丁香园 获取数据。 然后我们将在这种情况下显示我们…

c# .net+香橙派orangepi 200块多打造自家 浇花助手 系统

由于出差多&#xff0c;这里的花经常过一段时间才能浇水,有些花都旱晕了&#xff0c;所以想做一个助手帮我远程就可以操作浇花&#xff0c;当然也完全可以发展为一个商用系统&#xff0c;拿浇花来做为一个测试平台吧&#xff0c;现在已经完成了&#xff0c;并已经运行了一个多月…

异双功能连接体:Alkyne PEG4 APN,2183440-36-8

一、产品描述&#xff1a; APN-C3-PEG4-炔是一种含有APN部分的异双功能连接体&#xff0c;对半胱氨酸和炔基具有很强的化学选择性。APN半胱氨酸缀合物在水性介质、人血浆和活细胞中的优异稳定性使这种新的巯基点击反应成为生物缀合应用的一种有前景的方法。 APN-C3-PEG4 alkyne…

C语言:关键字----switch、case、default(开关语句)

C语言&#xff1a;基础开发----目录 C语言&#xff1a;关键字—32个(分类说明) 有32个关键字详细说明&#xff0c;还有跳转链接&#xff01; 一、开关语句----介绍 开关语句&#xff0c;包括以下四种关键字&#xff1a; switch&#xff1a;开关语句case&#xff1a; 开关语句…

PHP如何实现订单的延时处理详解

业务需求 订单是我们在日常开发中经常会遇到的一个功能&#xff0c;最近在做业务的时候需要实现客户下单之后订单超时未支付自动取消的功能&#xff0c;刚开始确认了几种方法&#xff1a; 客户端到时间请求取消服务端定时查询有没有需要取消的订单&#xff0c;然后批量处理下…

深度学习入门(五十)计算机视觉——转置卷积

深度学习入门&#xff08;五十&#xff09;计算机视觉——转置卷积前言计算机视觉——转置卷积课件&#xff08;初见转置卷积&#xff09;1 转置卷积2 为什么称之为“转置”课件&#xff08;再谈转置卷积&#xff09;1 转置卷积2 重新排列输入和核形状换算同反卷积的关系总结教…

Android -- 每日一问:Activity的启动模式(launchMode)有哪些,有什么区别?

经典回答 这应该是一道很虐人的面试题&#xff0c;很多人都答不上来&#xff0c;很多人根本就没有用过。当我发现在被我面试的人中有80%的比例对它不了解时&#xff0c;我找过一些同事讨论是否还有在面试中考查这个问题的必要&#xff0c;得到的回答是“程序员何苦为难程序员”…

网络面试题总结

IO协议 问题一:如何理解IP的不可靠和无连接 不可靠:指的是不能保证数据包能成功地到达目的地。发生错误的时候,丢弃该数据包,发送ICMP消息给信源端。可靠性由上层提供。无连接: :IP 不维护关于后续数据报的状态信息。 体现在,IP 数据可以不按顺序发送和接收。A 发送连续…

信息安全工程实践笔记--Day2 暴力破解

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录实验目标一、弱口令分类1.系统服务弱口令2.设备弱口令3.社工型的弱口令二、弱口令的攻击方式暴力破解获取密码的方式三、bp实操1.bp模块讲解1.sniper&#xff08;狙击…

跨平台下移动应用的开发框架对比与分析

当前由于移动互联网技术的日益发展&#xff0c;人们对移动互联网程序的要求也是越来越高&#xff0c;以往的互联网程序已经不能满足人们日益增长的需求&#xff0c;对此相关的工作技术人员要不断努力&#xff0c;研发出与时俱进的移动互联网程序。 近些年来由于平板电脑、智能…

【HTML5】调查问卷制作简约版

当你第一次使用CSS时候 目录 1、调查问卷网页展示及源码 1.1html源码 1.2css源码 2、form表单属性的用法 2.1date属性 2.2radio属性 2.3checkbox属性 2.4textarea标签 2.5required属性 2.6button标签 前言&#xff1a; 大家好&#xff0c;我是拳击哥带你捶键盘。首先感…

是前端受欢迎,不是你学了前端你就受欢迎好吧

☆ 这几天世界杯真是爆冷啊&#xff0c;也许是这届世界杯是冬天举办的原因吧。 ☆ 昨晚的德国对日本&#xff0c;日本做为亚洲小组冲出的第一名&#xff0c;实力强没有问题。而且我从小就看《足球小子》&#xff0c;大空翼深入人心啊。还记得那个动画片&#xff0c;放了学赶紧回…

运营版uniapp多商户商城小程序+H5+APP+商家入驻短视频社区种草直播阶梯拼团

运营版uniapp多商户商城小程序H5APP商家入驻短视频社区种草直播阶梯拼团 前后端全套源码&#xff0c; 支持二次开发&#xff0c;代码无加密&#xff01; 独立商家后台 用于店铺商品管理订单管理发货管理等 多类经营模式 多商家B2B2C、自营B2C运营模式 私有化部署 前端Uni…

Unity编辑器拓展最全实现

1编辑器顶部菜单学习 验证事项 2编辑器Scene菜单学习 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor;public class TestSceneMenu : MonoBehaviour { [InitializeOnLoadMethod] //加入这个属性&#xff0c;就相当于…

7.前端笔记-CSS-元素显示模式

HTML元素分为块元素和行内元素两种类型 1、块元素 常见的块元素&#xff1a; <h1>~<h6> <p> <div> <ul> <ol> <li>块元素的特点&#xff1a; &#xff08;1&#xff09;独占一行 &#xff08;2&#xff09;高度、宽度、内外边距可…

java线程池详解

一 介绍 线程我们可以使用 new 的方式去创建&#xff0c;但如果并发的线程很多&#xff0c;每个线程执行的时间又不长&#xff0c;这样频繁的创建线程会大大的降低系统处理的效率&#xff0c;因为创建和销毁进程都需要消耗资源&#xff0c;线程池就是用来解决类似问题。 线程…