タイトルは本当に意味をなさない。しかし、私はより良いものを考えることができないので、私を許してください... これを考慮してください。クロージャの変数をインポート関数に渡す
handleFBResp
の定義をコールバックから独自のモジュールに移動しようとしています。しかし、難しいことは、dispatch
を使用する必要があります。これはクロージャからのみアクセス可能です。
bind
トリックは新しい機能を作成するため使用できません。removeListener
は機能しません。
ここで適切な方法は何ですか?
(action) => (dispatch, getState) => {
chrome.tabs.create({
url: FB_OAUTH_URI
}, (tab) => {
// I would like this function definition to be extracted
// into its own module, and import it.
function handleFBResp(tabId, tabObj, _) {
if (typeof tabObj.url !== 'undefined') {
let matchedCode = tabObj.url.match(/code=(.+)/);
if (matchedCode) {
chrome.tabs.onUpdated.removeListener(handleFBResp);
chrome.tabs.remove(tabId);
fbLogin(matchedCode[1]);
dispatch ...
}
}
}
chrome.tabs.onUpdated.addListener(handleFBResp);
// this below wouldn't work because bind creates a new function,
// and removeListener won't work
// chrome.tabs.onUpdated.addListener(handleFBResp.bind(null, dispatch));
}
「handleFBResp」をリスナーとして追加する必要があります。 'dispatch'を渡すためには' bind 'をする必要があります。しかし、それは 'removeListener'が動作しないようにします –
申し訳ありません、あなたは呼び出し元ではないことがわかりました。私は最初にコードの最後のビットを見逃していました。まだ基本的な解決策です。ちょっと待ってください、。 –
@ barry-johnsonはちょうどそれを理解しました..ハハ、助けてくれてありがとう。あなたのコメントは実際に私に影響を与えました:D –