나는 아래와 같이 redux-saga
감시자/사가 설치를주고 나타납니다 corewar
내가 작성한 가져온 npm
패키지컨텍스트 오류
function* parseSaga(action) {
let result = corewar.parser.parse(action.redcode)
yield put({ type: PARSE, result })
}
export function* parseWatcher() {
yield takeLatest(PARSE_REQUESTED, parseSaga);
}
.
기능은 위와 같이 작성하면 예상대로 작동하지만, 나는 그렇게 yield call
에 parse
에 전화를 포장하고 싶은 것을 내가 할 수있는 여기에 문서에 설명 된대로 더 나은 테스트 일 : https://redux-saga.js.org/docs/basics/DispatchingActions.html
그러나, 나는과 같이 함수 호출을 마무리 :
let result = yield call(corewar.parser.parse, action.redcode)
을 나는 다음과 같이 내 NPM 패키지에서 온 나타나는 오류 :
uncaught at parseWatcher at parseWatcher
at takeLatest
at parseSaga
TypeError: Cannot read property 'scanner' of null
at Parser.parse (http://localhost:3000/static/js/bundle.js:2017:28)
at runCallEffect (http://localhost:3000/static/js/bundle.js:43679:19)
at runEffect (http://localhost:3000/static/js/bundle.js:43601:648)
... and so on
내
npm
내부에있어
public parse(document: string, options?: IParseOptions): IParseResult {
options = Object.assign({}, Parser.DefaultOptions, options || {});
var context = this.scanner.scan(document, options);
... other stuff
}
는 그래서이 무용담을 사용을 통해 어떻게 든 같이 나타납니다 :이 경우
스캐너는 아래 그림과 같이 (타이프 단위) parse
방법으로 호출되는 Parser
클래스 내부 속성입니다 패키지 및 this
참조를 엉망으로 만들었지?
어떻게 든 이전의 컨텍스트가 유지되는지 확인해야 할 것 같지만 외부 호출을 래핑하여 잃어버린 방법을 알지 못해서 이것을 달성하는 방법을 모르겠다. redux-saga
call
함수 .
편집 : 줄거리는
그래서 그것은 확실히 상황에 맞는 문제입니다 두꺼워 있지만 중첩 된 함수 호출을 호출 관련 보인다. parse
는 루트 개체에서 노출 이제 다음과 같은 결과가 표시되도록 내가 npm
패키지를 쥐게했습니다
작품
let result = yield call(corewar.parse.bind(corewar), action.redcode)
let result = yield call([corewar, corewar.parse], action.redcode)
하지만 원래의 중첩 방법을
하지 않습니다 작동하지 않음
let result = yield call(corewar.parser.parse.bind(corewar), action.redcode)
let result = yield call([corewar, corewar.parser.parse], action.redcode)
루트 객체에서 공용 인터페이스를 공개하고 싶습니다 (어쨌든 내 할 일 목록에 있던대로). 그러나 예상되는 결과입니까? 또는 일부 기발한?