2017-11-13 9 views
0

複数のソースからデータを取得するためにAPIコールを送信する必要があります。取得するデータは、さまざまな形式(配列、オブジェクト、ネストされた配列)です。私が気に入っていることは、私が必要とする部分を抽出する機能を持たせることです。私は、この抽出機能を持っているか、単にちょうど私がそれを使用する場合、私は必要なデータを抽出する必要がある場合どちらが良いjsコーディング練習ですか?

今私は疑問に思う(簡単に言えば:?良く練習している1)。

私は個人的にので、後者を好みます私は、データのどの部分を抽出する必要があるかを確認するために前後に移動する必要はありません。 例

const data = getData("example.com"; 

const getData = async(url)=>{ 
    const rawData= await get(url); 
    switch(url){ 
    case EXAMPLE_URL: 
     return rawData.data[0].Users; 
    case OTHER_EXAMPLE_URL: 
     return rawData.data; 
    case OTHER_URL: 
    return rawData.data[0].Enum; 

} 
} 
+0

、これが役に立てば幸い、それが簡単にテストケースを作成し、あまりにも書き込みより再利用可能なコードにあなたを強制的に行います何度も何度もやり直してみると機能は良いですが、この機能は非常に強く結合していて、狂った脆さです。あなたの3つの機能であなたのより良い。 – bryan60

答えて

1

私は複数の機能の中にそれを分割したいデータを抽出する

インライン抽出

const data = get("example.com").data[0].Users; 

利用機能。今、呼び出し側は、いくつかの明確な価値を得るために、どのURLを渡すべきかを知る必要はありません。

あなたは、同じURLから2つの異なる値を取得することになるかどうかわかりません。あなたが目指すべき

//maybe using a simple utility 
const getUrlPath = (url, ...path) => { 
    let fetchPath = path.reduceRight((next, key) => obj => next(obj[key]), identity); 
    return() => get(url).then(fetchPath); 
} 
const identity = v => v;  

//and then creating the different functions to get the different values 
const getExample = getUrlPath(EXAMPLE_URL, "data", 0, "Users"); 
const getOther = getUrlPath(OTHER_EXAMPLE_URL, "data"); 
... 
1

一つの核となるアイデアは、機能だけで一つのことを行いますが、それで非常にくそ良いこと、そうするために目指していないはずですは「それらすべてを支配する1 FUNC。」溶液。

あなたの場合、2つのタスクで3つのことを探して、URLからフェッチし、結果からデータを抽出します。

// Task 1: Fetch URL 
const fetchUrl = async() => { 
    const response = await fetch('example.com', { ...some options }); 

    // Do some error checking (just demo code for idea) 
    if (response.status === 'error') throw new Error('fethcing Error Message'); 

    // If no error found, return with response 
    return response; 
} 


// Task 2: extract data 
const getUserFromResponse = response => response.data[0].Users; 

const getEnumFromResponse = response => response.data[0].Enum; 

ここでは、それらを機能の中に組み立てることができます。単一のタスクまでの機能を破る

const getUser = async() => { 
    try { 
    const response = await fetchUrl(); 
    const user = getUserFromResponse(response); 
    return user; 
    } catch (e) { 
    // do error handling 
    } 
} 

const getEnum = async() => { 
    try { 
    const response = await fetchUrl(); 
    const enum = getEnumFromResponse(response); 
    return enum; 
    } catch (e) { 
    // do error handling 
    } 
} 

は歓声:)あなたがしなければならない場合、私は、意味

関連する問題