promise面试真题汇总

1.基础知识/构造函数中的函数只执行一次,then方法可以多次调用


const promise = new Promise((resolve,reject) => {

 setTimeout(() => {

  console.log('1')

  resolve('2')

 },1000)

})

promise.then((res) => {

 cons.left(res)

})

promise.then((res) => {

 cons.left(res)

})

//1 2 2

2.快手真题

题目:使用promise手写延迟器,在执行函数之后2秒后打印1
function sleep(time) {
  // 请写出你的代码
}
sleep(2000).then(() => {
  console.log(1)
})
// 解
return new Promise((resolve,reject) => {
  setTimeout(() => {
    resolve()
  },time)
// })

3.深信服真题

注:为了保证链式调用的正常运行。上一个promise返回的结果(不管成功还是失败)都会传递给下一个promise作为它成功时候的回调

Promise.resolve().then(() => {
  return new Error('报错了')
}).then(res => {
  cons.left("之后",res)
}).catch(err => {
  cons.left("catch:",err)
})
// 之后  Error: 报错了

4.手撕promise

注: 1.架构 => status,value,reason,resolve(),reject()

2.异步是怎么实现的

3.链式调用时怎么实现的

// 1.基本结构
function myPromise(excutor) {
  let self = this;
  self.stateus = 'pending';
  // 状态
  self.value = null;
  // 成功的结果
  self.reason = null;
  // 失败的理由
}
self.onFulfilledCallbacks = [];
self.onRejectedCallbacks =[];
// 成功的回调
function resolve(value) {
  // 4.状态该表的后续处理
  if(self.status === 'pending') {
    self.value = value;
    self.status = 'fulfilled';
    // 状态改变,依次取出
    self.onFulfilledCallbacks.forEach(item => item(value))
  }
}
// 失败的回调
function reject(reason) {
  if(self.status === 'pending');
    self.reason = reason;
    self.status = 'rejected';
    self.onRejectedCallbacks.forEach(item => item(reason))
}
// 2.先执行
try{
excutor(resolve,reject)
}catch(err) {
  reject(err)
}
// 3.  .then方法()
myPromise.prototype.then = function(onFulfilled,onRejected) {
  // 容错处理
  onFulfilled = typeof onFulfilled === 'function' ?
  onFulfilled : function (data) {resolve(data)}
  onRejected = typeof onRejected === 'function' ?
  onRejected : function(err) {throw err}
  //使promise支持异步-----发布订阅模式
  //pending
  let self = this
  if(this.status === 'pending') {
    self.onFulfilledCallbacks.push(onFulfilled);
    self.onRejectedCallbacks.push(onRejected)
  }
  console.log(this.status)
}
let demo = new myPromise((resolve,reject) => {
  console.log('hello')
  setTimeout(() => {
    //异步执行
    resolve(1)
  },1000)
})
demo.then(data => console.log(data))

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
题目是什么以及为什么在面试中需要掌握Promise? 在面试中,关于Promise面试题目可以涉及Promise的基本概念、使用方法和原理等方面的内容。例如,可以要求解析一段Promise的代码,或者要求描述Promise的执行顺序和特性等。通过这些面试题目,面试官可以了解面试者对Promise的理解程度和应用能力,进而评估其在异步编程方面的能力和经验。 面试中需要掌握Promise的原因主要有以下几点: 1. 异步编程是现代前端开发中非常重要的一部分,Promise是一种用于处理异步操作的机制,能够更好地处理回调地狱问题和提高代码的可读性。 2. PromiseJavaScript中的关键特性之一,在使用现代前端框架如React和Angular时,几乎无法避免使用Promise。因此,掌握Promise能够更好地理解和应用这些框架。 3. Promise面试中常见的考点之一,掌握Promise能够更好地准备面试,展现自己的技术能力和经验。 综上所述,掌握Promise对于面试来说是非常重要的,它能够展示你对异步编程的理解和应用能力,并且能够提升你在面试中的竞争力。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [【异步系列三】10道 Promise 面试题彻底理解 Promise 异步执行顺序](https://blog.csdn.net/qq_41131745/article/details/127004662)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [10 个 JavaScript Promise面试题](https://blog.csdn.net/snsHL9db69ccu1aIKl9r/article/details/125454133)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值