標題一開始的 AJAX 稍微誤導了我一下,看到 Fetch 忽然又明白了什麼。還是用 XHR 阿,基本上是再包裝成 promise 換個名字而已。AJAX 對我來說是非同步、動態地刷新頁面的概念,不限定使用怎麼樣的包裝與方法。
在這之前,有時懶得導入 fetch ,很無聊地自己把一些 XHR 包成 promise 就不管了 XD (e.g. yongjhih/bilibili-helper/commit/60ea2db1)
順便推一下 o3 相關文獻: 2014/11 blog2 2015/8 slides3
很大的 json 倒沒特別留意。但在使用 jackson ObjectMapper 時,要留意的是沿用 ObjectMapper instance, 否則要重新掃 annotations 會很花時間的。
不過後來我們都改用 ig-json-parser 的分支: LoganSquare1 了。
私有的就 gitlab 開放的就 github
因為有架 git social hosting 已經三年多了,那時我有印象的是 gitorious、gitlab。而 gogs 與 gitbucket 是這一兩年我才聽到的,所以還沒機會。
BTW, 其他開發部屬:
git-repo tool 拉 code, gradle build, gitlab + github webhook, ci -> jenkins + travis-ci, issue tracker -> phabricator, code review -> gitlab merge-request + github pull-request
phabricator 是放在 docker container 裡 。架 gitlab 的時候,我 ubuntu kernel 還沒換,不能用 docker Orz..
@koji , 不好意思,我好像漏掉其他要回應的部份。
第一種寫法,在例外發生時,確實不會停掉 subscription ,不過,downloadObs 的部份要稍微修正:1. downloadObs.subscribeOn(Schedulers.io())
下載需背景, 因為這裡 subscriber 已經回到 mainThread() 2. 在 downloadObs 時,Activity/Fragment 生命週期要留意,可包個 AppObservable.bindActivity(activity, downloadObs).subscribe(/*update ui*/
)。
既然都已經交給 ViewObservable 做生命週期管理,所以為了不要再控制 scheduler, 我會選擇第二種寫法只要處理例外就好。
retry() 肯定要把錯誤吞掉才能繼續 retry ,不過如果你想要處理例外後再 retry ,你可以使用 retry(Func2<Integer, Throwable, Boolean> predicate)
:
.retry((i, e) -> { // here i is retry count
e.printStackTrace();
return true; // continue retry if return true
})