2017-11-10 2 views
1

은, ES-린트 내가 내 코드에서 오류가 나에게 말하고있다 기능는 돌아 오는-사가에서 사용하기 위해 발전기 기능을 내보낼 시도 할 때

/*eslint-disable func-style*/ 
const myExampleSaga = function*() { 
     yield takeEvery('DO_SOMETHING_REQUEST', andDoThisFunc); 
}; 
export default myExampleSaga; 

내가 더 많거나 적은 괜찮 ES-린트가 발전기를 지원하지 않는다는 사실과 함께 (또는 적어도 그렇게 보인다) 오전 : 그것은 현재, 그리고 규칙이 현재 무시되는 방법을 미세 그러나 다음 코드가 작동하지 않는 이유를 알고 싶습니다. :

undefined is not an object (evaluating 'regeneratorRuntime.mark') 

은 다음과 같습니다 메시지가 내 rootSaga에서 발생되는 오류는 : 다음과 같은 오류 메시지와 함께

export default function*() { 
    yield takeEvery('DO_SOMETHING_REQUEST', andDoThisFunc); 
} 

/*eslint-disable func-style*/ 
export const rootSaga = function* rootSaga() { 
    yield all([ 
     spawn(myExampleSaga) 
    ]); 
}; 

사람이 말해 줄 수 왜 위 코드가 유효하지 않습니까? 나는 그것이 hoisting과 관련이 있다고 생각하지만, 그것이 왜 무효가 될지 알 수 없었다.

+0

이 시도 [ "오류", "표현"] */'여기 규칙 ABOT 읽어 https://eslint.org/docs/rules/func-style # 규칙 세부 사항 –

답변

0

위의 코드가 유효하지 않은 이유를 누구든지 말해 줄 수 있습니까?

이 일반적 무용담으로 코드를 transpiling에 사용되는 regenerator-transformbabel plugin의 잘 알려진 문제입니다. 이 문제는 async 함수에도 영향을 미치므로 regenerator-transform 메커니즘으로도 구현됩니다.

export default function*() { 
    yield takeEvery('DO_SOMETHING_REQUEST', andDoThisFunc); 
} 

transforming that code 이후에는 두 가지 문제가있을 수 있습니다. 첫 번째는 regenerator-runtime 종속성을 생략하는 것이므로 필수 항목입니다. 두 번째는 기능 호이스트이므로 발생 순서가 중요 할 경우 암시 적으로 지정해야합니다.

올바른 솔루션입니다 :`/ * eslint의 FUNC 스타일 :

import 'regenerator-runtime'; 
const mySaga = function*() { 
    yield takeEvery('DO_SOMETHING_REQUEST', andDoThisFunc); 
} 
export default mySaga; 
+1

감사합니다. –

관련 문제