面试官让我写一个delay函数

然后这是我写的代码

async function delay(){setTimeout(function() {}, 3000);
}

面试官就和我说不是这个,用promise

当时就蒙了,什么东西,为什么要用promise

然后问豆包说

Promise 是 JavaScript 中用于处理异步操作的对象,它代表一个异步操作的最终完成(或失败)及其结果值。

首先要知道setTimeout是一个异步的任务触发器,它的目的是告诉浏览器几秒后去把回调函数放到任务队列中等待执行,它本身不会让主线程停下来等 3 秒

正确代码:

// 正确写法:返回 Promise,3秒后 resolve
async function delay() {return new Promise((resolve) => { // 返回一个 pending 状态的 PromisesetTimeout(() => {resolve(); // 3秒后调用 resolve,让 Promise 变为 fulfilled 状态}, 3000);});
}// 测试:此时 await 会等待 3秒
async function test() {console.log("1. 开始");await delay(); // 等待 Promise 变为 fulfilled(3秒后)console.log("2. 结束"); // 3秒后才会打印
}
test();

Promise 的默认行为 当你通过 new Promise(executor) 创建 Promise 时,它的初始状态就是 pending(等待中),直到 executor 函数内部调用了 resolve() 或 reject() 才会改变状态。

resolve();

该函数可以帮助让创建的promise fulfilled状态

另外补充promise的三种状态

Promise 的三种状态

  1. pending(等待中):初始状态,既不是成功也不是失败
  2. fulfilled(已成功):操作完成,会触发 then 方法的回调
  3. rejected(已失败):操作出错,会触发 catch 方法的回调

异步函数默认会返回一个fulfilled状态的promise

后面一个算法题

写了十几分钟没写出来

// Pet -> Pet
// Pet<Dog> -> [Pet, Dog]
// Pet<Dog<Cat>> -> [Pet, [Dog, Cat]]
// Pet<Dog, Cat> -> [Pet, Dog, Cat]
// Pet<Dog, Cat<RedCat, YellowCat>, Rabbit> -> [Pet, Dog, [Cat, RedCat, YellowCat], Rabbit]
#include <iostream>
#include <string>
#include <vector>
#include <unordered_map>using namespace std;string temp;
unordered_map<int,vector<string>> mp;int main()
{cin>>temp;int iter=0;string s="";for(int i=0;i<temp.size();i++){if(temp[i]=='<')iter++;else if(temp[i]=='>'){mp[iter].push_back(s);iter--;cout<<s<<"\n";s="";}else{s+=temp[i];}}for(pair<int,vector<string>> p:mp){int f=p.first;cout<<f;vector<string> str=p.second;cout<<"第"<<f<<"层的字符串:";for(int i=0;i<str.size();i++){cout<<str[i]<<" ";}cout<<"\n";}return 0;
} 

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu Desktop 22.04.5 LTS 使用默认的 VNC 远程桌面

1. 打开 VNC 打开设置 - 分享 - 远程桌面2. 配置 VNC 打开远程桌面 启用vnc 选择vnc密码访问 配置密码3. 固定密码 远程桌面的访问密码在每次开机后会刷新一次&#xff0c;可以通过以下方式固定 打开【应用程序】&#xff0d;【附件】&#xff0d;密码和加密密钥&#xff08;或…

【无线安全实验4】基于伪随机数的WPS PIN码逆向(精灵尘埃/仙尘攻击)

文章目录1 原理分析1.1 WPS连接过程1.1.1 初始阶段1.1.2 注册阶段1.2 WPS攻击原理1.2.1 在线攻击1.2.2 离线攻击1.2.2.1 Ralink模式1.2.2.2 eCos模式2 实验过程3 参考资料在2011年 Stefan Viehbck 演示过WPS的在线暴力攻击&#xff0c;由于PIN码猜测最多只需11000种组合&#x…

IDEA开发过程中经常使用到的快捷键

IntelliJ IDEA 开发 Java 时常用的快捷键列表 代码编辑与行操作快捷键功能描述Ctrl Y删除当前行。Ctrl D复制当前行到下一行。Shift Alt ↑将当前行&#xff08;或选中块&#xff09;向上移动。Shift Alt ↓将当前行&#xff08;或选中块&#xff09;向下移动。Ctrl /注…

ubuntu使用webrtc库开发一个webrtc推拉流程序

目录 一. 前言 二. 整体交互流程 三. 类实现说明 1. WebRtcClient 2. SignalPeerClient 3. WebRTCStream 4. 视频源类 5. 拉流渲染 四. 使用示例 1. 推流代码示例 2. 拉流代码示例 一. 前言 在 《ubuntu编译webrtc库》我们介绍了如何在 ubuntu 上使用 webrtc 源代码…

【Block总结】ConverseNet:神经网络中的反向卷积算子

1. 论文信息 标题:Reverse Convolution and Its Applications to Image Restoration 发布平台:arXiv 论文链接:https://arxiv.org/pdf/2508.09824 代码仓库:https://github.com/cszn/converseNet 任务领域:图像恢复(去噪、超分辨率、去模糊) 核心贡献:提出了一种新的反…

优化浏览体验:4个设置让Google Chrome更好用!

想要更流畅、更快速的浏览体验吗&#xff1f;本文章将向大家展示Google Chrome中你应该立即更改的4个重要设置&#xff0c;设置调整将帮助您提升性能&#xff0c;让你的浏览更高效。1、打开浏览器&#xff0c;在地址栏输入“chrome://flags"确定&#xff0c;在搜索标志中输…

【Git】一篇文章带你入门Git

1. 初识 Git 1.1 Git 是什么&#xff1f; Git 是一个开源的分布式版本控制系统&#xff0c;用于高效地跟踪和管理项目代码的变更历史&#xff08;不仅仅是代码&#xff0c;还有其它格式也是可以的~&#xff09; 1.2 为什么要有 Git 在学习或者是工作的时候&#xff0c;比如…

8 基于机器学习进行遥感影像的地物分类-以随机森林为例

目录 1 读取数据 2 数据预处理 3 模型训练 4 精度分析 5 模型预测 1 读取数据 1.右键数据所在文件夹,用pycharm打开为项目 2.在settings中设置python环境为先前配置的带GDAL和sklearn的环境 3.新建一个文件夹命名为code来存放代码,在code文件夹中新建一个rfc.py

极简版 Nginx 反向代理实验步骤

以下是最核心的反向代理实现步骤&#xff0c;专注于 “客户端→Nginx 代理→后端服务” 的基础转发功能&#xff1a;一、准备 2 台服务器角色IP 示例需安装软件代理服务器192.168.1.10Nginx后端服务器192.168.1.11Nginx/Apache二、后端服务器配置&#xff08;192.168.1.11&…

Windsurf 插件正式登陆 JetBrains IDE:让 AI 直接在你的 IDE 里“打工”

那天你说,我们可以永远在一起——成了我听到的最高兴的,而后知后觉的谎言。 而今天,AI 说:“我可以帮你写完这段代码。” —— 这才是真正的“永远在一起”。 最近,AI 编程工具赛道迎来一场“潜行式革命”:Windsurf Wave 7 正式发布 JetBrains IDE 插件版本,彻底打破“A…

188. Java 异常 - Java 异常处理规范

文章目录188. Java 异常 - Java 异常处理规范&#x1f4dc; 什么是“Catch or Specify Requirement”&#xff1f;✅ 两种满足方式方法一&#xff1a;使用 try-catch 捕获异常方法二&#xff1a;使用 throws 声明异常❌ 不遵守规则会怎样&#xff1f;&#x1f4a1; 哪些异常必须…

泛型通配符 T、E、K、V、?

在Java后端开发中&#xff0c;你一定在写集合类或工具类时&#xff0c;见过 T、E、K、V、? 这样的泛型通配符。但你是否有过以下疑惑&#xff1a; T、E、K、V 到底有什么区别&#xff1f;为什么大家都用这些字母&#xff1f;List<?> 和 List 有什么不同&#xff1f;什么…

基于脚手架微服务的视频点播系统-数据管理与网络通信部分的预备工作

基于脚手架微服务的视频点播系统-数据管理与网络通信部分的预备工作一.数据管理二.网络通信2.1客户端通信模块及测试用例的实现2.2MockServer搭建的相关接口介绍2.3MockServer的搭建示例一.数据管理 在前⾯的实现中&#xff0c;程序中的数据、以及界⾯操作等全部搅合在⼀起&am…

html表单登录模式代码

使用的是Content-Typeapplication/x-www-form-urlencoded形式如代码如下的html&#xff0c;后端没写下去&#xff1a;<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><title>管理员登录</title><…

NLP:Transformer之self-attention(特别分享3)

本文目录&#xff1a;一、核心思想&#xff1a;一句话概括二、计算流程的直观比喻三、分步计算详解&#xff08;附数字例子&#xff09;第 1 步&#xff1a;创建 Query, Key, Value 向量第 2 步&#xff1a;计算注意力分数第 3 步&#xff1a;缩放并应用 Softmax第 4 步&#x…

25、优化算法与正则化技术:深度学习的调优艺术

学习目标:深入理解各种优化算法的原理和适用场景,掌握学习率调度的方法和策略,学会使用Dropout、批归一化等正则化技术,理解早停和验证策略,建立深度学习调优的系统性知识。 深度学习的成功不仅依赖于精巧的模型架构,更在于巧妙的训练策略。如果说网络架构是房屋的设计图…

Netty-01-NIO前置知识

目录 NIO三大组件 一. ByteBuffer 基本用法 DirectByteBuffer与HeapByteBuffer对比 字符串转ByteBuffer ByteBuffer.wrap(byte[] ) 粘包与拆包 文件编程 零拷贝transferTo 二. 阻塞与非阻塞Channel 三. Selector SelectionKey&#xff08;重点&#xff09; Select…

知识点17:多Agent系统架构设计模式

知识点17&#xff1a;多Agent系统架构设计模式 核心概念 掌握系统架构思维&#xff0c;理解多Agent系统的设计原则和模式 架构设计核心概念 在构建多Agent系统时&#xff0c;良好的架构设计是系统成功的关键。本节将介绍多Agent系统架构设计中的核心概念&#xff0c;包括单点瓶…

数据库造神计划第五天---增删改查(CRUD)(1)

&#x1f525;个人主页&#xff1a;寻星探路 &#x1f3ac;作者简介&#xff1a;Java研发方向学习者 &#x1f4d6;个人专栏&#xff1a;《从青铜到王者&#xff0c;就差这讲数据结构&#xff01;&#xff01;&#xff01;》、 《JAVA&#xff08;SE&#xff09;----如此简单&a…

基于Vue3的人工智能生成内容标识服务平台前端页面设计

效果图&#xff1a;素材库&#xff1a;App.vue<template><div id"app"><!-- 头部导航 --><Header /><!-- 主要内容区域 --><main class"main-content"><div class"container"><!-- 强制性国家标准…