2016-12-04 1 views
1

저는 ES6 모듈을 작성하고 있지만 내 주 index.js에서 인수를 생략하는 방법은 모르지만 노출 된 방법으로 확인하십시오. ES6 모듈에 매개 변수를 선택적으로 전달합니다.

// lib/methods.js 
import find from 'lodash.find'; 
import composedFetch from '../composedFetch.js'; 

export const getStatus = id => composedFetch(id) 
    .then(data => find(data.processOverview.processSteps, { status: `active` })) 
    .catch(e => console.log(e)); 

export const openingHours = (id, day) => { 
    if (!day) throw new Error(`Please specify a day`); 

    return composedFetch(id) 
    .then(data => { 
     const obj = find(
     data.deliveryPoint.openingSchedules, 
     { dayOfTheWeek: day.toUpperCase() } 
    ); 

     return obj.openingHours[0]; 
    }) 
    .catch(e => console.error(e)); 
}; 

내 방법은 매개 변수 일 필요 볼 수 있듯이


// index.js 
import {getStatus, openingHours} from './lib/methods.js'; 

export default ID => { 
    if(!ID) throw new Error(`An ID needs to be passed`); 

    return { 
    getStatus: getStatus(ID), 
    openingHours: openingHours(ID), 
    }; 
}; 
.

import bpost from 'bpost'; 

const pkg = bpost('someIDhere'); 
const status = pkg.getStatus(); 
const openingHours = pkg.openingHours('monday'); 

나는 아직 나머지 연산자와 기본 매개 변수하지만 운이 일을 시도 : 당신이 먼저 ID로 인스턴스화 다음 방법을 사용할 수 있도록 모듈이 작동해야하는 방식이다. 내 테스트는 여전히이 테스트 코드로 하루 오류를 던지며 (이 문제가 해결되면 작동 함)

// methods.test.js 
import bpost from '../src/index.js'; 

describe(`Method: global.bpost`,() => { 
    it(`should show the available methods for the module`,() => { 
    expect(() => bpost(`someIDhere`)).not.toThrow(); 
    }); 
}); 

미리 감사드립니다.

+0

비록 초기 값이 지정되지 않은 경우에도이 함수를 사용하기를 원하기 때문에 초기 값은 if (! day) 조건을 throwing error가 아닌 다른 값으로 변경하는 것입니다. 아마도 어떤 종류의 외관은 명백한 결과를 줄 것이다.이 간단한 생각을 한번 보자. http://www.dofactory.com/javascript/facade-design-pattern – eloleon

+0

@eloleon hmm 대신 console.error를 사용하여 변경할 수 있지만 요일을 지키지 않으면 함수가 실행되기를 원하지 않습니다. – thibmaek

+0

당신이 이것을 찾고 있다고 생각합니다. http://stackoverflow.com/questions/36314/what-is-currying – duivvv

답변

1

당신은

export default ID => { 
    if(!ID) throw new Error(`An ID needs to be passed`); 

    return { 
    getStatus:() => getStatus(ID), 
    openingHours: day => openingHours(ID, day), 
    }; 
}; 

반환 된 개체 속성이 실제로 방법이 될 수 있도록 할 필요가있다.

또는

,

return { 
    getStatus: getStatus.bind(null, ID), 
    openingHours: openingHours.bind(null, ID), 
    }; 

는 동일한 기능을 수행하지만, 일반화하기가 쉽습니다 것이다 (같은 자동으로 가져온 모든 방법을 장식하려는 경우).

+0

첫 번째 발췌 문장을 사용해 주셔서 감사합니다. – thibmaek

관련 문제