我们目前面临实现 SCORM LMS 系统的设计问题。例如,API 定义了一个函数 LMSCommit,它必须返回“true”或“false”。在该方法中,我们的 LMS 必须使用在其参数中包含成功或失败消息的回调函数对服务器端服务进行异步调用。 我们声称,这根本不可能!然而,我们认为值得询问一些专业人士,我们是否遗漏了什么。
SCO(对我们没有影响)调用这样的方法:
var result = LMSCommit('');
我们的 LMS(对我们的影响)我们实现了这样的东西:
function LMSCommit(useless) {
callOurServiceFunction(function(Status) {
// what am I supposed to do here in order to put status into
// the return value of the outer function???
}
// fake true as the callourServiceFunction returned immediatly,
// no idea how I can use Status to create a return value
return 'true';
}
我们是否遗漏了一些花哨的技巧,或者 SCORM 标准只是“有争议的”?
最佳答案
它通常使用异步代码实现,并返回一个毫无值(value)的“真”值。这是 SCORM 类(class)开发人员所熟知的,他们已经学会了不要依赖 Commit 返回值来处理任何重要的事情。在这种情况下,所有的返回值意味着一个 ajax 请求被触发了。
如果您使用同步方法实现 Commit,在等待返回值时过程会出现滞后和停顿,这将保证大量投诉和声称您的 SCORM 引擎已损坏。
与您处境相同的人非常沮丧,但不幸的是,您对此无能为力。
为不太熟悉 SCORM 的人提供一些背景知识:
SCORM 是规范的汇编,而不是真正的标准,它在 2004 年进行了最后一次重大更新。(此后的更新很小,没有重大的体系结构更改。)这意味着它已有 10 年历史了。 SCORM 1.2 甚至更老。 ADL 已宣布他们将不再更新 SCORM——如他们所说,盖子已经关闭。
从正确的 Angular 来看,上一次 SCORM 重大更新发布时 IE6 是主流浏览器,Google Chrome 和 iPhone 不存在,雅虎和 RealPlayer 相关,Facebook 是一个宿舍项目,每个人都认为 Adobe Flex 和 RIA 是 future 的方式。现在是一个不同的世界……如果他们重新开始,我相信他们会走不同的路。这就是 xAPI(又名 Tin Can)的用武之地;它使用不同的通信模型(RESTful API),可用于在支持 xAPI 的 LMS 中替代 SCORM。 (注意 xAPI 仍未得到广泛支持。)
xAPI 链接(如果有人对此感兴趣):
关于Javascript SCORM API 提交 - 异步还是同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24040586/