2017-08-31 3 views
0

私はAPIからデータを取得するため、このコードを持っている:Javascriptを:camelizeすべてのAPIレスポンス

const newPromise = Promise.race([ 
    fetch(`${process.env.API_URL}news`), 
    new Promise((resolve, reject) => { 
     setTimeout(() => reject(new Error('request timeout')), 10000) 
    })   
    ]); 

    newPromise 
    .then(response => camelize(response.json())) 
    .then(data => this.onSuccessNewsFetched(data)) 
    .catch(error => this.onErrorNewsFetched(error)) 

私は、JSONレスポンスをcameliseしたいと思いますが、それは動作しません。 私は、各フェッチで何度も何度もこの関数を呼び出す必要なく、私が得るすべてのAPI応答に対してこの操作をしたいと思います。また、APIへのすべての要求がそれを必要とするため、タイムアウトレースを抽象化することもできます。これはどのように達成できますか?

答えて

2

は単にあなたのためにそれを行う関数を記述し、その代わりに

function betterFetch(url, options = { timeout: 10000 }) { 
    const apiPromise = Promise.race([ 
    fetch(url), 
    new Promise((resolve, reject) => { 
     return setTimeout(() => reject(new Error('request timeout')), options.timeout) 
    }) 
    ]); 

    return apiPromise 
      .then(response => response.json()) 
      .then(data => camelize(data)) 
} 
// later 
betterFetch(`${process.env.API_URL}news`) 
    .then(data => this.onSuccessNewsFetched(data)) 
    .catch(error => this.onErrorNewsFetched(error)) 
を使用します
関連する問題