Parse Bolts:一個(gè)面向iOS和Android的底層庫集合
此前,Parse被Facebook收購。最近,它開源了一個(gè)面向iOS和Android的底層庫集合,統(tǒng)稱為Bolts。根據(jù)Parse的公告,Bolts是Parse和Facebook共同努力將兩家公司各自獨(dú)立開發(fā)的小型底層工具類合并的結(jié)果。
Tasks是GitHub上***個(gè)可用的Bolts組件,旨在按照J(rèn)avaScript Promises模型處理異步操作。
Promises試圖解決使用回調(diào)函數(shù)處理異步操作時(shí)通常會(huì)出現(xiàn)的若干問題,尤其是這樣一個(gè)事實(shí):由于回調(diào)函數(shù)內(nèi)部異步操作的嵌套,試圖組合多個(gè)串行或并行異步操作會(huì)很快變得難以處理。
為了這個(gè)目標(biāo),一個(gè)Promise代表一項(xiàng)可能已經(jīng)完成或者可能尚未完成的任務(wù)的結(jié)果,而它最終可能會(huì)變成一個(gè)錯(cuò)誤。這樣,任何異步操作都可以立即在執(zhí)行結(jié)果中返回一個(gè)Promise;該P(yáng)romise可以隨時(shí)訪問,如果異步操作尚未完成,可能阻塞調(diào)用者。
不過,一個(gè)Promise通常關(guān)聯(lián)兩個(gè)回調(diào)函數(shù),用于在異步任務(wù)已經(jīng)完成或者失敗時(shí)調(diào)用。Promises的特別之處在于回調(diào)函數(shù)本身封裝在Promise之中,所以它們只在將來的某個(gè)時(shí)間點(diǎn)執(zhí)行,或者根本不執(zhí)行,這依賴于原Promise的狀況。
多虧這一機(jī)制,處理異步操作的序列變得簡單易懂,因?yàn)镻romises可以鏈到一起來代表異步操作和其回調(diào)函數(shù),如上圖所示(源自:Promises,Luke Smith。)
Promises的另一項(xiàng)優(yōu)點(diǎn)在于錯(cuò)誤通過Promises鏈傳播的方式:由于Promise知道它是否已經(jīng)達(dá)成,它可以將錯(cuò)誤狀態(tài)沿著Promises鏈傳播,直至找到一個(gè)錯(cuò)誤處理器,因此,開發(fā)人員無需為鏈上的每個(gè)異步操作提供錯(cuò)誤處理器。
Promises實(shí)現(xiàn)的組件可以用在JavaScript、Scala、Clojure和許多其它語言中。
Parse聲稱,與Android AsyncTask和iOS NSOperation相比,Tasks有若干優(yōu)勢,其中包括:
- 連續(xù)執(zhí)行數(shù)個(gè)任務(wù)不會(huì)像只使用回調(diào)函數(shù)時(shí)那樣創(chuàng)建嵌套的“金字塔(pyramid)”代碼。
- Tasks是完全可組合的,允許開發(fā)人員執(zhí)行分支、并行和復(fù)雜的錯(cuò)誤處理。
- 開發(fā)人員可以按照執(zhí)行順序安排基于任務(wù)的代碼,而不必將邏輯分解到分散的回調(diào)函數(shù)中。
Bolts組件與Parse或者Facebook服務(wù)完全無關(guān),不需要使用Parse或者Facebook的開發(fā)人員賬戶。
盡管已經(jīng)發(fā)布了更多的Bolts組件,但Parse尚未發(fā)布與之相關(guān)的任何細(xì)節(jié)。
查看英文原文:Parse Announces Bolts, a Collection of Low-level Libraries for iOS and Android