面試前端遇到的問題

面試官讓我寫一個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"><!-- 強制性國家標準…