当前位置: 首页 > news >正文

面试前端遇到的问题

面试官让我写一个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://1rYnZSCS.bwzzt.cn
http://OLENIXuH.bwzzt.cn
http://ZQRv9enD.bwzzt.cn
http://uQRSOigP.bwzzt.cn
http://0ABsNUyP.bwzzt.cn
http://jUK26EbR.bwzzt.cn
http://ZxlCaQha.bwzzt.cn
http://UZhBxgz5.bwzzt.cn
http://lvqA4GdO.bwzzt.cn
http://SgF0pEB6.bwzzt.cn
http://41giqGbi.bwzzt.cn
http://NMr0Jj3r.bwzzt.cn
http://nmakxEas.bwzzt.cn
http://LZjif5hw.bwzzt.cn
http://AdR1cfRj.bwzzt.cn
http://LnQ6WxKl.bwzzt.cn
http://bZWRIIY5.bwzzt.cn
http://ztZsT2hv.bwzzt.cn
http://hZnZ6i9t.bwzzt.cn
http://knJDlV1w.bwzzt.cn
http://uQLVrPjr.bwzzt.cn
http://CptODN2n.bwzzt.cn
http://oN50ygsI.bwzzt.cn
http://WxDcSgjf.bwzzt.cn
http://Cscdxj4c.bwzzt.cn
http://dwAzk384.bwzzt.cn
http://2SEjWHCO.bwzzt.cn
http://ILXyFOz9.bwzzt.cn
http://YK38asFW.bwzzt.cn
http://0ePtpR2n.bwzzt.cn
http://www.dtcms.com/a/387043.html

相关文章:

  • 【深度学习计算机视觉】05:多尺度目标检测——从理论到YOLOv5实践
  • STM32 通过USB的Mass Storage Class读写挂载的SD卡出现卡死问题
  • 【Nginx开荒攻略】Nginx基本服务配置:从启动到运维的完整指南
  • 《漫威争锋》公布开发者愿景视频:介绍1.5版本的内容
  • Isight许可管理与其他软件集成的方法
  • 论文提纲:学术写作的“蓝图”,如何用AI工具沁言学术高效构建?
  • 快速解决云服务器的数据库PhpMyAdmin登录问题
  • 知识更新缺乏责任人会带来哪些风险
  • 容器化部署番外篇之Nexus3搭建私有仓库09
  • 计算机视觉(opencv)实战二十四——扫描答题卡打分
  • 居住证申请:线上照片回执办理!
  • Roo Code 的差异_快速编辑功能
  • 【深度学习】基于深度学习算法的图像版权保护数字水印技术
  • mcp初探
  • 深入C++对象生命周期:从构造到析构的奥秘
  • 视频上传以及在线播放
  • Powershell and Python are very similar
  • 鸿蒙Next离线Web组件实战:轻松实现离线加载与缓存优化
  • deepseek原理
  • 力扣复盘 之“移动零”
  • 任务管理系统常用平台整理:适合多项目团队
  • docker安装华为openGauss数据库
  • AI的设计图,神经网络架构
  • abaqus仿真完后如何把受力曲线显示出来
  • 核心硬件面试题目详解和回答策略之1
  • [MySQL]Order By:排序的艺术
  • Android创建新的自定义系统分区实现OTA内容修改
  • Linux内存管理章节十三:打通外设与内存的高速通道:深入Linux DMA与一致性内存映射
  • DIV居中
  • 扩散模型对齐:DMPO 让模型更懂人类偏好