如何实现延迟1秒返回指定数据的JavaScript mocker函数
正确实现代码
function mocker(data) { const delayInMilliseconds = 1000; // 按要求返回函数 return function () { // 返回Promise实例支持异步调用 return new Promise((resolve) => { setTimeout(() => { resolve(data); }, delayInMilliseconds); }); }; }
原代码问题说明
- 第一点:原
mocker函数没有按要求返回函数,执行mocker(data)后得到的是undefined,无法满足后续调用getUsers()的需求 - 第二点:没有用Promise包装异步逻辑,
setTimeout回调里的return只能把值返回到回调函数本身,无法透传到外层,自然不支持.then()和await的异步调用方式
实现逻辑说明
mocker接收传入的data后,直接返回一个新的函数,符合入参返回要求里@returns {Function}的约定- 调用返回的函数时,会返回一个Promise实例:
- 内部
setTimeout延迟1秒执行 - 延迟结束后调用
resolve把传入的data抛出,即可被.then()或者await捕获到对应的值
- 内部
- 完全符合测试用例要求:
- 用
await调用时,会等待Promise完成,拿到的值和原始data完全相等,通过第一个测试 - 直接调用返回的函数时得到的是Promise实例,和原始
data不相等,通过第二个测试
- 用
内容的提问来源于stack exchange,提问作者NerdyStudent
相关产品推荐
相关产品推荐

