2017-07-28 8 views
0

http postを作成していて、サブスクライブ内のローカル変数に値を割り当てようとしています。subscribe()内のローカル変数に値を割り当てました

ただし、ローカル変数のコード行は決して呼び出されません。どうして ?私のコードで何が間違っていますか?

これは、これは私のサービス

addLeave(body: leave): Observable<leave[]> { 
let bodyString = JSON.stringify(body); // Stringify payload 
let headers = new Headers({ 'Content-Type': 'application/json' }); // ... Set content type to JSON 
let options = new RequestOptions({ headers: headers }); // Create a request option 

return this.http.post(this._apiUrl, body, options) 
    .map(res => res.json()) 
    .catch((error: any) => Observable.throw('Error')); 
} 

私のMVCコントローラ方式である私のコンポーネント

submitted = false; 

    onSubmit() { 
    this.leaveService.addLeave(this.model) 
     .subscribe(res => { 
      this.submitted = true; **// This line of code never execute. Why?** 

     }); 

    } 

です(ただ、往復の罰金であることを確認するために単純なものを追加しました)

[HttpPost("[action]")] 
public IActionResult CreateLeaveRequest([FromBody] LeaveModel leave) 
{ 
    return StatusCode(200); 
} 

}

コンソールにエラーが表示されません。 問題を理解するためにさらに情報が必要な場合は教えてください。

注:

をonSubmit()間違いなく呼ばれます。シーケンスはサービスからaddLeaveを呼び出し、コントローラメソッド(デバッグポイントヒット)に要求を送信するOnSubmit()を呼び出します。

あなたの.MAP機能が何かを返す必要
+0

onSubmit()はどのように呼び出されますか?ビューから?投稿してください。また、console.log(res)には何が表示されますか? – Vega

+1

'console.log( 'testing');' onSubmitの後に関数が呼び出されているかどうかを調べます。 – joshrathke

+0

フォームにngSubmit()が定義されていることと、 'type =" submit "に割り当てられたフォーム内のボタンがあることを確認してください。 – joshrathke

答えて

1

...

return this.http.post(this._apiUrl, body, options) 
    .map(res => { 
     console.log(res) // Log here to see what you get in response body 
     return res.json() || []; // if response has no json then return [] 
    ) 
    .catch((error: any) => Observable.throw('Error')); 
} 
+0

太い矢印の関数は既にそれを返します – Vega

+1

'.map(res => res.json())'は '.map(res => {res.json();})' – echonax

+0

また、何か特別なことがなければ、.mapの問題を完全に回避するために、新しいクライアントが既にあなたのために 'HttpClientModule'を使用し、出力をjsonに完全にマッピングする必要はありません。 – joshrathke

0

観察可能でアイテムを発したときにサブスクライブに渡される。この最初の関数が実行されます。ポストが値を返さないと手動応答をマップしない、項目が放出されていないと、この機能が実行されていない場合は、次の

.subscribe(res => { 
     this.submitted = true; **// This line of code never execute. Why?** 

    }); 

あなたは観測からアイテムを放出するか、またはあなたが試みることができる必要がありますサブスクライブの第3引数を使用して、発行時ではなく完了時にコードを実行します。

.subscribe(
     () => {},    **// On emit 
     err => {},    **// On error 
     () => { 
      this.submitted = true; **// On complete ** 
    }); 
+0

こんにちは@DeborahK、あなたの詳細な返信をありがとう。しかし、私はあなたがかなり正しいとは思わない。実際の問題はサーバーからJSONレスポンスをクライアント(クライアント)に返していないため、私のサービスで彼のライン--- "map(res => res.json())"が失敗し、結果として購読していました()が実際にサブスクライブ/コールされていませんでした。 Andrea Stalkerはそれを非常によく確認し、私の問題を解決しました。それが私の理解を向上させることができれば、私はあなたの側からもっと多くを探してうれしいです。乾杯 – simbada

関連する問題