【发布时间】:2021-03-23 22:57:36
【问题描述】:
我终于尝试掌握 Promises,这是 JavaScript 的更新和更神秘的角落之一。以下是我在技术测试中遇到的一个问题,似乎触及了我对 Promises 的不理解的核心。
问题如下:
- 您有一个名为
Service的预定义类,具有以下方法:-
generate()- 生成 0 到 100 之间的随机数。 -
guess(yourGuess)- 对随机数进行给定的猜测,并返回一个 Promise。这个 Promise 又会在 100 毫秒 内做两件事之一:- 如果猜测正确,则 Promise 将被解析,与该 Promise 对应的猜测作为其第一个参数。
- 如果猜测不正确,Promise 将被拒绝。
-
submit(yourGuess)- 提交您认为正确的猜测。
-
- 您必须编写一个异步函数
main(),它将:- 使用
Service对象生成一个随机数。 - 在 400 毫秒内提交对同一对象的正确猜测。
- 必须捕获任何被拒绝的 Promise。
- 使用
这是我的代码:
const MAX_NUMBER = 100;
async function main()
{
const service = new Service();
let guessInPromise;
service.generate();
for(let i = 0; i <= MAX_NUMBER; i++)
{
service.guess(i)
.then(guessInPromise => service.submit(guessInPromise));
.catch(err => console.log(err));
}
return service;
}
我的代码能完成工作吗?我对 Promise 和异步函数有什么明显误解吗?
【问题讨论】:
-
generate()或guess()是否返回 Promise 对象? -
const guessInPromise;没有意义,因为你没有给它一个初始值,以后也不能给它一个值。 -
我认为这里的诀窍是使用
Service.guess(...)将所有可能的猜测映射到promise,然后等待Promise.any()。 -
@crashmstr 实际上,它应该只是错误 - 声明一个没有赋值的 const 是没有意义的,并且是一种禁止的语法。
-
这段代码可以运行,但是有一些奇怪的地方。为什么返回
service?记录“正确的数字是 X”是否有意义。与其使用一大堆浮动的 Promise,不如在猜测正确后返回结果。您的代码当前会立即返回服务对象。编辑:我看到 Yoshi 打败了我。
标签: javascript asynchronous promise