数月前,Parse 被Facebook 收购。最近,它开源了一个面向iOS 和Android 的底层库集合,统称为Bolts。根据Parse 的公告,Bolts 是Parse 和Facebook 共同努力将两家公司各自独立开发的小型底层工具类合并的结果。
Tasks 是 GitHub 上第一个可用的Bolts 组件,旨在按照 JavaScript Promises 模型处理异步操作。
Promises 试图解决使用回调函数处理异步操作时通常会出现的若干问题,尤其是这样一个事实:由于回调函数内部异步操作的嵌套,试图组合多个串行或并行异步操作会很快变得难以处理。
为了这个目标,一个Promise 代表一项可能已经完成或者可能尚未完成的任务的结果,而它最终可能会变成一个错误。这样,任何异步操作都可以立即在执行结果中返回一个Promise;该Promise 可以随时访问,如果异步操作尚未完成,可能阻塞调用者。
不过,一个Promise 通常关联两个回调函数,用于在异步任务已经完成或者失败时调用。Promises 的特别之处在于回调函数本身封装在Promise 之中,所以它们只在将来的某个时间点执行,或者根本不执行,这依赖于原Promise 的状况。
多亏这一机制,处理异步操作的序列变得简单易懂,因为Promises 可以链到一起来代表异步操作和其回调函数,如上图所示(源自: Promises,Luke Smith 。)
Promises 的另一项优点在于错误通过 Promises 链传播的方式:由于 Promise 知道它是否已经达成,它可以将错误状态沿着 Promises 链传播,直至找到一个错误处理器,因此,开发人员无需为链上的每个异步操作提供错误处理器。
Promises 实现的组件可以用在 JavaScript 、 Scala 、 Clojure 和许多其它语言中。
Parse 声称,与 Android AsyncTask 和 iOS NSOperation 相比,Tasks 有若干优势,其中包括:
- 连续执行数个任务不会像只使用回调函数时那样创建嵌套的“金字塔(pyramid)”代码。
- Tasks 是完全可组合的,允许开发人员执行分支、并行和复杂的错误处理。
- 开发人员可以按照执行顺序安排基于任务的代码,而不必将逻辑分解到分散的回调函数中。
Bolts 组件与 Parse 或者 Facebook 服务完全无关,不需要使用 Parse 或者 Facebook 的开发人员账户。
尽管已经发布了更多的 Bolts 组件,但 Parse 尚未发布与之相关的任何细节。
查看英文原文:**** Parse Announces Bolts, a Collection of Low-level Libraries for iOS and Android
评论