私は以下のように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
}
だから、それはこのサガを使って何とかのように表示されます。この場合は
スキャナは、以下に示すように(typescriptです中)parse
メソッドで呼び出されParser
クラスの内部プロパティでありますパッケージとは、this
リファレンスを乱した?
以前のコンテキストが保持されていることをどうにかして確認する必要があるようですが、これを実現する方法がわかりませんでした。redux-saga
call
ファンクション。
EDIT:プロットは、だから、それは間違いなく、コンテキストの問題だが、それは、ネストされた関数呼び出しを呼び出すに関連すると思われる
を厚く。 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)
私はルートオブジェクトからパブリックインターフェイスを公開しようとしています(とにかく私のtodoリストにあったように)、これは期待された結果ですか?またはいくつかのクールーク? parse
がcoreware.parser
だけでなくcoreware
の方法であるので
私は限り佐賀のスコープを盗んでいるように見える理由は、私は完全にこの時点で理解していないTBHように、その深いをバインドするとは行きませんでしたあまりにも多くの変更を加える前にもう少し調べてみたいと思います。 2番目の例は、私にとっては構文的には良いようですが、私は 'corewar'パッケージのAPIを制御して、そのような機能をそのように公開することができます。オリジナルの関数はTypescriptで書かれているので、元のポイントごとにモジュールでまとめられているはずです。redux-sagaがどのようにスコープ上でミットしているのかわかりません – dougajmcdonald