Miobiki

  1. HOME
  2. javascript
  3. fetchのコールバックの書き方

fetchのコールバックの書き方

fetchのコールバックの書き方は特に何も考えずに毎回thenで繋げて書いていました。
そんなときに、headerの値をjsonに追加して返すものを書いてみると、変数で保持しないといけないのでスマートではないと感じていました。

let total, totalPages

fetch(url).then(response => {
    if (!response.ok) {
        return Promise.reject(response);
    }
    
    total = parseInt(response.headers.get('X-WP-Total'), 10)
    totalPages = parseInt(response.headers.get('X-WP-TotalPages'), 10)
    
    return response.json()
}).then(json => {
    // ...
    json.total = total
    json.totalPages = totalPages
    // ...
    return json
})

そこで見つけた書き方がこちらです。

// https://github.com/netlify/netlify-cms/blob/master/src/backends/github/API.js

parseJsonResponse(response) {
    return response.json().then((json) => {
        if (!response.ok) {
            return Promise.reject(json);
        }

        return json;
    });
}

スマート!
この方法を真似すれば一番最初のコードもスマートになりそうなので書き直してみました。

fetch(url).then(response => {
    return response.json().then(json => {
        if (!response.ok) {
            return Promise.reject(json);
        }
        // ...
        json.total = parseInt(response.headers.get('X-WP-Total'), 10);
        json.totalPages = parseInt(response.headers.get('X-WP-TotalPages'), 10);
        // ...
        return json;
    });
});

これで変数を使わずにかけるようになりました。

netlify-cmsのbitbucket対応はバージョン2.0で入りそうな感じでした。楽しみです。 https://github.com/netlify/netlify-cms/pull/525