質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
ECMAScript

ECMAScriptとは、JavaScript類の標準を定めるために作られたスクリプト言語です。

Redux

Reduxは、JavaScriptアプリケーションの状態を管理するためのオープンソースライブラリです。ReactやAngularで一般的にユーザーインターフェイスの構築に利用されます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

1回答

514閲覧

redux-sagaのcallで呼び出したクラスのthisがうまく挙動していない?

roooo

総合スコア57

ECMAScript

ECMAScriptとは、JavaScript類の標準を定めるために作られたスクリプト言語です。

Redux

Reduxは、JavaScriptアプリケーションの状態を管理するためのオープンソースライブラリです。ReactやAngularで一般的にユーザーインターフェイスの構築に利用されます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2019/06/28 06:48

編集2019/06/28 06:51

redux-saga/effectsを使って別のClassから呼び込むとエラーが出てハマっています。

以下でnewだとうまくいくのですが、sagaでcallするとthis.のメソッドがnullと言われてしまいます。
ご教示願えないでしょうか?

// ApiService.js import axios from "axios"; export default class ApiService { constructor() {} createApiClient({ token = null }) { const apiClient = axios.create({ baseURL: "https://*****", timeout: 3000, headers: { "Content-Type": "application/json", "X-Requested-With": "XMLHttpRequest", token: token }, responseType: "json" }); return apiClient; } get(url, tokenVal) { return this.createApiClient({ token: tokenVal }) .get(`${url}`) .then(response => { return response; }) .catch(function(error) { console.log("ERROR!! occurred in Backend."); }); } }
//aa_Module,js import { call, put, take } from "redux-saga/effects"; import ApiService from "**/ApiService"; const apiService = new ApiService(); // newするとこれだと動く apiService_a.get( "hoge", "hogeToken" ); export const sagas = { *doGet() { while (true) { yield take(actions.setAAData); try { const res = yield call( apiService_a.get, "hoge", "hogeToken" ); console.log(res); //↑これだと /* typeError: Cannot read property 'createApiClient' of null */ //発生 } catch (e) { console.log(e); } } } };

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

こんにちは。

以下のように修正してみるといかがでしょうか?

修正前:

javascript

1const res = yield call( 2 apiService_a.get, // この行を以下のように修正 3 "hoge",

修正案1:

javascript

1const res = yield call( 2 apiService_a.get.bind(apiService_a), // 修正案1 3 "hoge",

  
もしくは、call([context, fn], ...args) を使って、以下でうまくいくかもしれません。

修正案2:

javascript

1const res = yield call( 2 [apiService_a, apiService_a.get], // 修正案2 3 "hoge",

参考になれば幸いです。

投稿2019/06/28 07:29

編集2019/06/28 08:15
jun68ykt

総合スコア9058

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

roooo

2019/06/28 08:15

うまくいきましたが、別の問題が発生しました。 consoleに延々と同じ処理がループされます。 ``` console.log(res); ``` がずっと表示されます。
jun68ykt

2019/06/28 08:19

while (true) { } のループからここで抜ける想定、という部分はどこかにありますでしょうか? あるのならば、そこに行ってないのだと思います。 なければ、無限ループになって、 > consoleに延々と同じ処理がループされます。 ということになるものと思います。
jun68ykt

2019/06/28 09:03

while (true) のループ本体 のコード全体を質問に追記頂ければ、何か分かるかもしれません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問