还剩14页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
promise面试题及答案
一、单项选择题(共30题,每题1分)(以下题目均为前端开发中常见的Promise面试考点,答案唯一)
1.1Promise的初始状态是以下哪项?A.resolvedB.fulfilledC.pendingD.rejected
1.2以下关于Promise的描述,错误的是?A.状态一旦确定不可改变B.是异步编程的解决方案C.必须通过回调函数处理结果D.支持链式调用
1.3Promise的then方法返回的对象类型是?A.原Promise实例B.新Promise实例C.普通对象D.字符串
1.4以下代码的输出结果是?console.logstart;const p=new Promiseresolve={console.logpromise;resolve;p.then=console.logthen1;p.then=console.logthen2;第1页共16页console.logend;A.start-promise-then1-then2-endB.start-promise-end-then1-then2C.start-end-promise-then1-then2D.start-promise-then1-end-then
21.5Promise中,若调用resolve和reject,最终会执行的是?A.仅resolveB.仅rejectC.先resolve后rejectD.先reject后resolve
1.6以下哪个方法用于捕获Promise中的错误?A.thennull,errorCbB.catcherrorCbC.both Aand BD.errorerrorCb
1.7Promise的静态方法中,用于等待所有Promise完成的是?A.Promise.allB.Promise.raceC.Promise.allSettledD.Promise.any
1.8Promise.all接收的数组中若有一个Promise被reject,最终结果是?A.仅返回reject的结果B.等待所有Promise完成后返回数组C.立即reject,返回该reject的原因第2页共16页D.抛出错误但不返回结果
1.9以下代码的输出结果是?const p=new Promiseresolve={setTimeout=resolve1,100;p.thenres=res+
1.thenres=res*2;A.1B.2C.3D.undefined
1.10微任务队列中,以下哪个任务的执行优先级最高?A.Promise.thenB.setTimeoutC.setIntervalD.DOM事件回调
1.11关于Promise链式调用,以下说法正确的是?A.每个then方法必须返回一个值B.后一个then的参数是前一个then的返回值C.若前一个then未返回Promise,后一个then会立即执行D.链式调用中只能有一个then方法
1.12Promise.reject的执行时机是?A.立即执行B.同步执行C.微任务队列中执行D.需显式调用才能执行
1.13以下代码中,最终会输出“success”的是?第3页共16页const p=new Promiseresolve,reject={if Math.random
0.5resolvesuccess;else rejecterror;p.thenres=console.logres,err=console.logerrA.仅当Math.random
0.5时输出“success”B.仅当Math.random=
0.5时输出“error”C.始终输出“success”或“error”,取决于随机数D.不会输出任何结果
1.14以下哪个是Promise与回调函数相比的核心优势?A.代码执行更快B.解决回调地狱问题C.支持同步操作D.无需处理错误
1.15Promise.allSettled的特点是?A.等待所有Promise完成,无论结果是resolve还是rejectB.只要有一个Promise完成就返回结果C.立即reject第一个失败的PromiseD.仅返回成功的Promise结果
1.16以下代码的输出结果是?const p1=Promise.resolve1;const p2=Promise.resolve2;const p3=Promise.reject3;Promise.all[p1,p2,p3].then第4页共16页res=console.logthen,res,err=console.logcatch,errA.then[1,2,3]B.catch3C.then[1,2]D.无输出
1.17关于Promise的catch方法,以下说法错误的是?A.只能捕获前面Promise链中的错误B.可以捕获当前then方法中的错误C.等同于thennull,errorCbD.必须放在Promise链的末尾
1.18Promise.race中,若多个Promise执行,最终结果由哪个决定?A.第一个完成的Promise(无论resolve或reject)B.第一个reject的PromiseC.一个完成的PromiseD.所有Promise的结果合并
1.19以下代码中,Promise状态为rejected的是?const p=new Promiseresolve,reject={//代码片段A.仅调用resolveB.仅调用rejectC.调用resolve和rejectD.未调用任何方法
1.20手写Promise时,核心需要实现的方法是?第5页共16页A.then和catchB.resolve和rejectC.all和raceD.状态管理和异步回调处理
1.21以下关于Promise的描述,正确的是?A.Promise对象一旦创建就会立即执行B.then方法是同步执行的C.Promise的状态变化是不可逆的D.catch方法只能捕获异步错误
1.22Promise中,若then方法返回一个非Promise值,后续then的参数是?A.该非Promise值B.前一个Promise的结果C.错误信息D.undefined
1.23以下代码的输出顺序是?console.logstart;setTimeout=console.logsetTimeout1,0;Promise.resolve.then=console.logpromise1;setTimeout=console.logsetTimeout2,0;Promise.resolve.then=console.logpromise2;console.logend;A.start-end-promise1-promise2-setTimeout1-setTimeout2第6页共16页B.start-end-setTimeout1-setTimeout2-promise1-promise2C.start-promise1-promise2-end-setTimeout1-setTimeout2D.start-promise1-end-promise2-setTimeout1-setTimeout
21.24关于Promise的手写实现,以下哪项是核心逻辑?A.定义状态变量,初始为pendingB.仅需处理resolve逻辑C.无需处理异步回调D.直接返回结果
1.25Promise.any的特点是?A.等待所有Promise完成,返回成功结果数组B.只要有一个Promise成功就返回该结果C.所有Promise成功后返回第一个成功结果D.所有Promise失败后返回错误
1.26以下代码中,会产生“回调地狱”的是?A.嵌套使用多个setTimeoutB.使用Promise.then链式调用C.使用async/await语法D.使用for循环遍历
1.27以下关于Promise和async/await的关系,正确的是?A.async/await是Promise的语法糖B.async函数返回Promise对象C.await必须在async函数中使用第7页共16页D.以上都正确
1.28Promise中,若调用then方法时未提供onRejected回调,会怎样?A.抛出错误B.忽略错误C.自动使用默认错误处理D.继续执行下一个then
1.29以下代码的输出结果是?const p=new Promiseresolve={resolve1;resolve2;//无效,状态已不可逆p.thenres=console.logres;A.1B.2C.1和2D.无输出
1.30关于Promise的静态方法,以下哪个用于等待所有Promise完成且不中断?A.Promise.allB.Promise.allSettledC.Promise.raceD.Promise.any
二、多项选择题(共20题,每题2分,多选、少选、错选均不得分)(以下题目有多个正确答案,全部选出才能得分)
2.1以下属于Promise状态的有?第8页共16页A.pendingB.resolvedC.fulfilledD.rejected
2.2Promise的then方法可以接收的参数有?A.onFulfilledB.onRejectedC.resolveD.reject
2.3以下关于Promise链式调用的特点,正确的有?A.每个then返回新的Promise实例B.后一个then的参数是前一个then的返回值C.可以通过return传递结果给下一个thenD.若返回Promise,会等待该Promise完成后执行下一个then
2.4Promise的静态方法有?A.allB.raceC.thenD.catch
2.5Promise.all的使用场景包括?A.并行请求多个接口后处理结果B.确保所有异步操作完成后再执行下一步C.处理多个独立但需要全部成功的任务D.只要有一个任务成功就继续执行
2.6以下会导致Promise状态变为rejected的有?第9页共16页A.调用rejectB.then方法中抛出错误C.then方法返回Promise且该Promise被rejectD.未调用任何方法
2.7关于Promise的错误处理,以下说法正确的有?A.catch方法可以捕获所有前序then的错误B.多个catch可以链式调用,捕获各自的错误C.若then中未处理错误,会一直向后传递,直到遇到catchD.try/catch可以捕获Promise的错误
2.8以下关于微任务和宏任务的说法,正确的有?A.Promise.then属于微任务B.setTimeout属于宏任务C.微任务队列在当前同步代码执行完后立即执行D.宏任务队列在微任务队列执行完后执行
2.9Promise.allSettled与Promise.all的区别在于?A.无论Promise结果如何都会等待所有完成B.返回结果包含每个Promise的状态和值C.遇到reject不会立即中断D.仅返回成功的Promise结果
2.10手写Promise时,需要实现的核心功能有?A.状态管理(pending-fulfilled/rejected)B.存储回调函数(then方法的参数)C.状态不可逆的判断D.异步回调的处理
2.11以下代码会输出“success”的有?第10页共16页//选项Aconst p=Promise.resolvesuccess;p.thenres=res;//选项Bconst p=new Promiseresolve={setTimeout=resolvesuccess,100;p.thenres=res;//选项Cconst p=Promise.rejecterror;p.catcherr=success;//选项Dconst p=new Promiseresolve={resolvesuccess;p.then.thenres=res;
2.12以下关于async/await的说法,正确的有?A.async函数返回Promise对象B.await必须在async函数中使用C.await会暂停async函数的执行D.await可以等待Promise或非Promise值
2.13Promise中,then方法的异步执行体现在?A.不会立即执行B.加入微任务队列C.等待当前同步代码执行完后执行D.与setTimeout的执行顺序一致
2.14以下哪些是Promise解决回调地狱的优势?第11页共16页A.代码扁平化,可读性提高B.支持链式调用,逻辑连贯C.错误处理集中化D.无需处理异步操作
2.15Promise.race的使用场景包括?A.超时控制(如请求超时后返回默认值)B.取多个请求中最快返回的结果C.等待多个任务中任意一个完成D.确保所有任务完成后执行
2.16以下关于Promise状态转换的描述,正确的有?A.pending可以转为fulfilledB.pending可以转为rejectedC.fulfilled可以转为rejectedD.状态转换后不可再变
2.17以下代码会执行的有?//选项Aconst p=new Promiseresolve={resolve;p.then={throw newErrorerror;};//选项Bconst p=new Promiseresolve,reject={rejecterror;p.catcherr={throw err;};//选项Cconst p=Promise.resolve.then={第12页共16页return Promise.rejecterror;p.catcherr=console.logerr;//选项Dconst p=new Promiseresolve={resolve1;p.thenres={return res+1;}.thenres={console.logres;
2.18关于Promise的手写实现,以下哪些说法正确?A.需要用数组存储回调函数B.状态变更时需触发存储的回调C.需处理回调的异步执行D.无需考虑this绑定
2.19以下哪些是Promise的常见错误使用场景?A.忽略错误处理(未使用catch)B.链式调用中返回非Promise值C.嵌套使用Promise导致逻辑混乱D.用Promise包装同步操作
2.20以下关于Promise和回调函数的对比,正确的有?A.Promise支持链式调用,回调函数不支持B.Promise错误处理更集中,回调函数需手动处理C.Promise可以中断异步流程,回调函数不能D.Promise代码可读性更高,回调函数易产生“回调地狱”
三、判断题(共20题,每题1分,正确打“√”,错误打“×”)第13页共16页
3.1Promise的初始状态是resolved()
3.2Promise的then方法是同步执行的()
3.3Promise.all接收的数组中,即使有一个Promise被reject,其他Promise的结果也会返回()
3.4Promise的状态一旦变为fulfilled,就不能再变为rejected()
3.5Promise的catch方法只能捕获异步错误,不能捕获同步错误()
3.6若then方法返回一个Promise,后续then的执行会等待该Promise完成()
3.7Promise.reject会立即执行,无需等待()
3.8Promise.allSettled返回的数组中,每个元素都是{status,value/reason}的对象()
3.9微任务队列的执行优先级高于宏任务队列()
3.10Promise的手写实现中,仅需处理resolve逻辑,无需处理reject()
3.11多个then方法可以在同一个Promise实例上调用()
3.12若then方法返回一个非Promise值,后续then的参数是该值()
3.13Promise.any会等待第一个成功的Promise,忽略后续的结果()
3.14async函数中使用return返回的值,等同于Promise.resolve的结果()
3.15Promise的状态转换是可逆的,例如从fulfilled转为pending()第14页共16页
3.16回调函数和Promise都能解决异步流程控制问题,且Promise更优()
3.17若Promise的then方法中未提供onRejected,会忽略错误并继续执行后续then()
3.18Promise.race中,若所有Promise都reject,最终会返回第一个reject的原因()
3.19手写Promise时,需使用setTimeout模拟异步操作()
3.20调用Promise的reject方法后,then的onRejected回调会立即执行()
四、简答题(共2题,每题5分)
4.1简述Promise的三种状态及其转换规则
4.2手写Promise的核心实现逻辑(不要求完整代码,说明关键步骤)附参考答案
一、单项选择题(每题1分)
1.C
2.C
3.B
4.B
5.A
6.C
7.A
8.C
9.D
10.A
11.B
12.A
13.C
14.B
15.A
16.B
17.D
18.A
19.B
20.D
21.C
22.A
23.A
24.A
25.B
26.A
27.D
28.B
29.A
30.B
二、多项选择题(每题2分)
2.C
2.ABD
2.ABCD
2.AB
2.ABC
2.ABC
2.ABC
2.ABCD
2.ABC
2.ABCD
2.ABC
2.ABD
2.ABC
2.ABC
2.ABC
2.ABD
2.ACD
2.ABC
2.ABC
2.ABD
三、判断题(每题1分)
3.×
3.×
3.×
3.√
3.×
3.√
3.√
3.√
3.√
3.×
3.√
3.√
3.√
3.√
3.×
3.√
3.×
3.√
3.×
3.×
四、简答题(每题5分)第15页共16页
4.1简述Promise的三种状态及其转换规则Promise有三种状态pending(进行中)、fulfilled(成功)、rejected(失败)状态转换规则初始状态为pending;调用resolve可将pending转为fulfilled;调用reject可将pending转为rejected;状态一旦转换为fulfilled或rejected,不可再变
4.2手写Promise的核心实现逻辑核心步骤定义状态变量(state),初始为pending;定义存储回调的数组(callbacks);resolve/reject方法检查状态,未改变时更新状态,遍历回调数组执行;then方法返回新Promise,根据当前状态执行回调或暂存回调,处理返回值为Promise的情况第16页共16页。
个人认证
优秀文档
获得点赞 0