前几天做了某公司的笔试题,其中有一道题目是这样:
实现一个promiseTimeout方法,该方法接收两个参数,第一个参数为promise,第二个参数为number类型。该方法的作用为:
- 若promise在第二个参数给定的时间内处于pending状态,则返回一个rejected的promise,其reason为new Error("promise time out")
- 若promise在第二个参数给定的时间内处于非pending状态,则返回值为promise
可以使用全部ES6语法。
看完题目之后就知道应该用Promise.race()
来实现,可是我的写法最终都无法返回题目中想要的返回值,不过打印能打印出来,希望大佬们可以指点一下,感谢。
function promiseTimeout(promise, time) {
let timeout = new Promise((resolve, reject) => {
setTimeout(() => {
reject(new Error("promise time out"))
}, time)
})
Promise.race([promise, timeout]).then((value) => {
// console.log(promise)
return promise
}, (reason) => {
// console.log(reason)
return reason
})
}
我觉得原因应该是出在在回调函数中return并不能正常返回外部函数的返回值,但是不知道如何做改进。
题主想复杂了吧
参考GitHub笔记ES6-Promise/Promise A+规范