克林贡翻译服务


故事

在这个练习中,你将实现一个TranslationService,让付费会员获得某种质量保证。

你发现了一个神奇的翻译 API,它能在合理的时间内完成任何翻译_请求_,你想借此大赚一笔。

这个神奇的 API 有一个非常精简的接口:

获取翻译

api.fetch(text)获取text的翻译,返回两个值:

  • translation:实际的翻译
  • quality:以数字表示的质量

如果没有可用的翻译(因为还没有请求过),API 会抛出错误。如果某段文本无法翻译,也会发生这种情况。

请求翻译

api.request(text, callback)请求text的翻译,在准备好之后调用callback,不传入任何值。

request API 并不稳定,这意味着有时 API 会带着错误调用callback。如果遇到这种情况,可以重新请求。

⚠ 警告!⚠

由于以前有些用户在编程时偷懒,总是请求翻译,甚至不检查文本是否已经被翻译过,所以如果文本已经被翻译过,API 会返回错误,并彻底、永久地封锁所有访问。

任务

以下是一些符合翻译服务故事的任务示例:

  • 获取翻译,忽略质量
  • 批量获取翻译,要么全部成功,要么全部失败
  • 请求翻译,最多重试 2 次
  • 获取翻译,检查质量,或按需请求

术语

以下是对说明中反复出现的术语(包括存根注释)的建议,而非规则:

  • 这个_注入的依赖_叫做TranslationService,或 API
  • 该服务是异步的,但从不提及这一点
  • Future 上的失败是指 API 抛出错误
  • Callback 上的失败是指 API 会带着错误调用callback

所有翻译文本都是从克林贡语翻译成英语。

实现

参考

注意

'arlogh Qoylu'pu'? 的正确翻译是 How many times has it been heard?。