fetch 二三事

之前介紹過 fetch 之後過了一段時間,有發現幾個目前 spec 上的一些細節要來分享一下。首先是上一篇文章說到的重複 header 的問題,詳細看下去後,發現 fetch 收的 header 參數有兩種,一個是 key value pair 的原生物件,另外一種是 Headers 物件,這個物件是 fetch spec 裡面新定義的:

var h = new Headers();
h.append('X-Custom-Header', '1');
h.append('X-Custom-Header', '2');
h.append('X-Custom-Header', '3');

就可以像這樣用append重複加上同樣名稱的 Header,其實丟原生的物件進去,也會在內部被轉成這個 Header 物件。

第二個要說的是關於回應 status code 在 400 到 600 之間時,Promise 物件是 resolve 不是 reject,理由是 Error 和 Exception 不一樣,不過有人開 Issue 在討論,會不會有改變還不知道,倒是如果現在用 github polyfill 想要處理這個問題的話,除了可以自己處理之外,也有人寫了 fetchres 這個,wrapper 可以把 fetch 的一些行為弄得更接近大部分開發者的直覺,目前提供的功能除了這個之外,還有一個是如果回傳的 type 是 JSON,但是內容的 JSON 語法有錯,那也會被丟到 reject 那邊去。