表示調整
閉じる
挿絵表示切替ボタン
▼配色
▼行間
▼文字サイズ
▼メニューバー
×閉じる

ブックマークに追加しました

設定
0/400
設定を保存しました
エラーが発生しました
※文字以内
ブックマークを解除しました。

エラーが発生しました。

エラーの原因がわからない場合はヘルプセンターをご確認ください。

138/210

外部データ取り込み色々テスト中9 外部データの取得(利用できる形で)成功!

さて外部データ(シナリオデータ読み込みを目標)の操作をテストします。


前に書いたimport環境確定は、個々でのテスト終わってからにします。

(どうせソースコードの汚れが予想されますので)


現時点では、


・ファイルを読むことは成功

・上の読み込みは非同期


という事までが確定です。


参考サイトとして書いただけの『RxJSの基礎中の基礎』の出番です。

https://qiita.com/agajo/items/7942743a0130f7a0f30b


外部データ取り込み色々テスト中4(RxJSを勉強中)

https://ncode.syosetu.com/n5283hn/133/


※割と下の方に

2018年04月24日に、RxJSのバージョン6.0.0がリリースされました。

RxJS 6.x以上では、この記事内にあるコードはそのままでは動かなくなっています。

と言う記述があるので注意

(更新の速さ、この辺がオープンソースソフトウェアのメリットにもデメリットにもなる所ですね)


以下の用語の概念は、読むとなんとなくわかりました。

・Observable

・Observer

・Subscribe


う~ん、

色々試していますがかなりてこずっています。


形としては


Observable.Subscribe(Observer関数)


と言う形で良さそうですが


まずObserver関数を以下のように定義しました。

------------------------------------------

  //Subscribe内で動かす関数

  observer_1 = {

   next: x => console.log('Observer1 got a value: ' + x),

   error: error => console.log('Observer1 got an error: ' + JSON.stringify(error)),

   complete: () => console.log('Observer1 got Complete'),

  }; // データを受け取った時に何をするのかが書かれている

------------------------------------------


そしてObservableを変数として、Subscribeメソッドで動かすと


let ObsebTest = this.http.jsonp(urlhoge, 'hogex');

ObsebTest.subscribe(this.observer_1)


以下のエラーが(observer_1のエラー時の定義の通りに)表示されます。


---------------------------------------------------------------

Observer1 got an error: {"headers":{"normalizedNames":{},"lazyUpdate":null,"headers":{}},"status":0,"statusText":"JSONP Error","url":"テストファイル名?hogex=ng_jsonp_callback_0","ok":false,"name":"HttpErrorResponse","message":"Http failure response for テストファイル名?hogex=ng_jsonp_callback_0: 0 JSONP Error","error":{}}

---------------------------------------------------------------


ファイルの中身を読み取り、それがjavascriptとして正しいならば、アラートなりconsole.logに出力なりは成功しますが、Observer関数に渡した結果はエラーのみ出力で処理につながりません。





色々調べていくと、"ng_jsonp_callback_0"で検索した結果に妙なサイトを発見。


中身は以下のようなのですが、これ、もしかしてこの問題の解決テストサンプル?


---------------------------------------------------------------

ng_jsonp_callback_0({"singleParameters":[{"name":"Status","type":"STRING","value":"OK"},{"name":"Description","type":"STRING","value":""}],"multipleParameters":[{"name":"CallReportInfo","singleParameters":[],"multipleParameters":[]},{"name":"CallReportWarn","singleParameters":[],"multipleParameters":[]},{"name":"CallReportError","singleParameters":[],"multipleParameters":[]},{"name":"DataOut","singleParameters":[{"name":"id","type":"STRING","value":"RICAVI"},{"name":"value","type":"x64","value":"eyJnd3RUdXBsYXMiOlt7InZhbHVlIjoi4oKsIiwidHlwZSI6IlNUUklORyIsIm9yZ0lzRm9ybXVsYSI6ZmFsc2UsImRhdGFUeXBlIjoiVHVwbGEiLCJsYW5ndWFnZSI6ImVuIiwiaWQiOiJVbml0cyJ9LHsidmFsdWUiOiIzMjIxLjU4NyIsInR5cGUiOiJOVU1CRVIiLCJvdXRwdXRGb3JtYXQiOiIjLCMjMC4wIiwic3JjQ2VsbEZvcm1hdCI6IiMsIyMwLjBfKTtbUmVkXVxcKCMsIyMwLjBcXCkiLCJvcmdJc0Zvcm11bGEiOnRydWUsImRhdGFUeXBlIjoiVHVwbGEiLCJsYW5ndWFnZSI6ImVuIiwiaWQiOiJWYWx1ZSJ9LHsidmFsdWUiOiJtbG4iLCJ0eXBlIjoiU1RSSU5HIiwib3JnSXNGb3JtdWxhIjpmYWxzZSwiZGF0YVR5cGUiOiJUdXBsYSIsImxhbmd1YWdlIjoiZW4iLCJpZCI6IlVuaXRzMiJ9LHsidmFsdWUiOiJSRVZFTlVFUyBpbiAyMDIxIiwidHlwZSI6IlNUUklORyIsIm9yZ0lzRm9ybXVsYSI6ZmFsc2UsImRhdGFUeXBlIjoiVHVwbGEiLCJsYW5ndWFnZSI6ImVuIiwiaWQiOiJEZXNjcmlwdGlvbiJ9LHsidmFsdWUiOiIgIiwidHlwZSI6IlNUUklORyIsIm9yZ0lzRm9ybXVsYSI6ZmFsc2UsImRhdGFUeXBlIjoiVHVwbGEiLCJsYW5ndWFnZSI6ImVuIiwiaWQiOiJEZXNjcmlwdGlvbjIifV0sImxldmVsIjoxLCJub3RlIjoiIiwidW5pdHMiOiLigqwiLCJzZWxlY3RhYmxlIjp0cnVlLCJyYW5nZUVuYWJsZWQiOmZhbHNlLCJyYW5nZU1pbiI6MC4wLCJyYW5nZU1heCI6MC4wLCJjc3NGb3JtYXQiOiJEQUctdGl0bGUiLCJoYXNDaGlsZHJlbiI6ZmFsc2UsImRhdGFUeXBlIjoiUm93IiwibGFuZ3VhZ2UiOiJlbiIsImlkIjoiUklDQVZJIn0\u003d"}],"multipleParameters":[]}]})

---------------------------------------------------------------


これを使ってテストするとデータ取得成功!(内部データに中身をコピーできました)


テスト環境の汚れたソースで恐縮ですが、以下に記載しますね。



外部テストデータ

---------------------------------------------------------------

ng_jsonp_callback_0({"singleParameters":[{"name":"Status","type":"STRING","value":"OK"},{"name":"Description","type":"STRING","value":""}]})

---------------------------------------------------------------


home.page.ts

---------------------------------------------------------------

hogex_0={}

constructor(private http: HttpClient) {

 let urlhoge = '外部データアドレス'

 let ObsebTest = this.http.jsonp(urlhoge, 'hogex');

 ObsebTest.subscribe(this.observer_1)

}

observer_1 = {

 next: x => this.testJSON(x),

 error: error => console.log('Observer1 got an error: ' + JSON.stringify(error)),

 complete: () => console.log('Observer1 got Complete'),

};

testJSON(x:JSON){//xはobserver_1 で取得したであろう外部データ

 this.hogex_0=JSON.parse(JSON.stringify(x));//外部データを内部データにコピー

 alert(this.hogex_0["singleParameters"][1]["name"])//内部データの一部をアラート表示

}

---------------------------------------------------------------


必要なimport等は、まだ調べていないのですが、大前進ですね!


追記:

割と本気で心配していましたが、実機での(デバッグモード)動作も確認取れました。

評価をするにはログインしてください。
ブックマークに追加
ブックマーク機能を使うにはログインしてください。
― 新着の感想 ―
このエピソードに感想はまだ書かれていません。
感想一覧
+注意+

特に記載なき場合、掲載されている作品はすべてフィクションであり実在の人物・団体等とは一切関係ありません。
特に記載なき場合、掲載されている作品の著作権は作者にあります(一部作品除く)。
作者以外の方による作品の引用を超える無断転載は禁止しており、行った場合、著作権法の違反となります。

この作品はリンクフリーです。ご自由にリンク(紹介)してください。
この作品はスマートフォン対応です。スマートフォンかパソコンかを自動で判別し、適切なページを表示します。

↑ページトップへ