Promise面试题

embedded/2024/9/22 17:58:53/

promise与 fetch、async/await_fetch async 获取结束标志-CSDN博客

手写promise A+、catch、finally、all、allsettled、any、race-CSDN博客

【建议星星】要就来45道Promise面试题一次爽到底(1.1w字用心整理) - 掘金

目录

每隔1秒输出1,2,3

红黄绿灯交替亮

按序执行数组

异步加载图片


每隔1秒输出1,2,3

const arr = [1, 2, 3]
arr.reduce((p, x) => {return p.then(() => {return new Promise(r => {setTimeout(() => r(console.log(x)), 1000)})})
}, Promise.resolve())

红黄绿灯交替亮

function red() {console.log("red");
}
function green() {console.log("green");
}
function yellow() {console.log("yellow");
}
const light = function (timer, cb) {return new Promise(resolve => {setTimeout(() => {cb()resolve()}, timer)})
}
const step = function () {Promise.resolve().then(() => {return light(3000, red)}).then(() => {return light(2000, green)}).then(() => {return light(1000, yellow)}).then(() => {return step()})
}step();

按序执行数组

const time = (timer) => {return new Promise(resolve => {setTimeout(() => {resolve()}, timer)})
}
const ajax1 = () => time(2000).then(() => {console.log(1);return 1
})
const ajax2 = () => time(1000).then(() => {console.log(2);return 2
})
const ajax3 = () => time(1000).then(() => {console.log(3);return 3
})function mergePromise (ajaxArray) {// 存放每个ajax的结果const data = [];let promise = Promise.resolve();ajaxArray.forEach(ajax => {// 第一次的then为了用来调用ajax// 第二次的then是为了获取ajax的结果promise = promise.then(ajax).then(res => {data.push(res);return data; // 把每次的结果返回})})// 最后得到的promise它的值就是datareturn promise;
}mergePromise([ajax1, ajax2, ajax3]).then(data => {console.log("done");console.log(data); // data 为 [1, 2, 3]
});// 要求分别输出
// 1
// 2
// 3
// done
// [1, 2, 3]

异步加载图片

function loadImg(url) {return new Promise((resolve, reject) => {const img = new Image();img.onload = function() {console.log("一张图片加载完成");resolve(img);};img.onerror = function() {reject(new Error('Could not load image at' + url));};img.src = url;});

http://www.ppmy.cn/embedded/7803.html

相关文章

怎么用手机远程控制电脑 远程控制怎么用

怎么用手机远程控制电脑:远程控制怎么用 在这个科技日新月异的时代,远程控制电脑已经成为了很多人的需求。有时,我们可能在外出时突然需要访问家中的电脑,或者在工作中需要远程操控办公室的电脑。这时,如果能用手机远…

FFmpeg合并音视频文件操作备忘(mac版)

利用NDM嗅探插件从B站下载下来的文件是音视频分开的,用剪辑软件合并时发现导出时文件都特别大,于是使用FFmpeg处理 环境: MBP M1芯片版 系统 macOS Sonama 14.4.1 操作步骤: 一、官方下载链接:https://evermeet.cx/…

IDEA2024配置RunDashBoard(Services)面板

IDEA2024配置RunDashBoard(Services)面板 新版本的IDEA没有RunDashBoard,取而代之的是Services面板,不需要配置workspace.xml文件; 本文教你简单的方法就能一个SpringBoot的Main运行多次,方便调试。 1、配置启动类 导航栏,Edit…

ElasticSearch中使用向量和关键词联合检索

注:案例测试数据及其索引构建详见:ElasticSearch中使用bge-large-zh-v1.5进行向量检索(一)-CSDN博客 中的第三部分。 假设任务场景为:用“新疆”向量检索相关的数据,同时需要匹配关键词“巴州”。 首先获取…

【JavaWeb】Day51.Mybatis动态SQL

什么是动态SQL 在页面原型中,列表上方的条件是动态的,是可以不传递的,也可以只传递其中的1个或者2个或者全部。 而在我们刚才编写的SQL语句中,我们会看到,我们将三个条件直接写死了。 如果页面只传递了参数姓名name 字…

springboot日志使用 SLF4J+Logback 实现(springboot默认的日志实现),日志打印到控制台及日志输出到指定文件

还是直接上代码 Slf4j 这玩意 默认支持 不用引入 yml 配置文件 # 日志配置 如果配置了xml 这个就不生效了 xml优先级最高 #logging: # file: # path: /home/logs # 日志目录地址 # name: /home/logs/skeleton.log # max-size: 1KB # 设置日志大小的最大大小 1…

J8 inceptionv1

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 前言 卷积神经网络大家族中有很多经典的网络,前面已经学习resnet,densenet相关网络,今天学习一种更久远的一种网络GoogLenet 网络结构…

Python编程:高效数据处理与自动化任务实践

一、引言 Python,作为一种解释型、交互式、面向对象的编程语言,凭借其简洁易懂的语法和强大的功能库,已经成为数据科学、机器学习、Web开发等多个领域的首选工具。本文将探讨Python在数据处理和自动化任务方面的应用,通过具体的代…