我有一个redux-saga
观察者/传奇设置,如下所示:
function* parseSaga(action) {
let result = corewar.parser.parse(action.redcode)
yield put({ type: PARSE, result })
}
export function* parseWatcher() {
yield takeLatest(PARSE_REQUESTED, parseSaga);
}
corewar
是我编写的导入npm
包。
当函数按上述方式编写时,它按预期工作,但我想将调用包含在parse
yield call
中,以便我可以更好地测试文档中描述的内容在这里: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
在这种情况下,扫描程序是Parser
类的内部属性,在parse
方法中调用,如下所示(在typescript中):
public parse(document: string, options?: IParseOptions): IParseResult {
options = Object.assign({}, Parser.DefaultOptions, options || {});
var context = this.scanner.scan(document, options);
... other stuff
}
所以看起来好像通过使用这个传奇它已经进入我的npm
包并弄乱了this
引用?
似乎我需要以某种方式确保保留先前的上下文,但我不知道如何实现这一点,因为我不知道如何通过在{{1}中包装外部调用来丢失它} redux-saga
功能。
编辑:情节变浓
所以它肯定是一个上下文问题,但它似乎与调用嵌套函数调用有关。我已经调整了call
包,以便npm
也从根对象公开,现在看到以下结果:
作品
parse
但原始的嵌套方法不是
不起作用
let result = yield call(corewar.parse.bind(corewar), action.redcode)
let result = yield call([corewar, corewar.parse], action.redcode)
我愿意从根对象公开公共接口(因为它仍然在我的待办事项列表中),但这是预期的结果吗?还是有些怪癖?
答案 0 :(得分:4)
这不起作用吗
version: '3'
services:
db:
image: postgres
web:
build: .
command: python3 manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
depends_on:
- db
由于docker-compose build --force-em --no-cache
是let result = yield call(corewar.parser.parse.bind(corewar.parser), action.redcode)
的方法,而不仅仅是parse
。
如果这不起作用那么为什么不:
coreware.parser