私は少し見たことがありますが、私の問題の解決策を見つけることができませんでした。これはエラー処理で異なるコンテキストを持っています(catchSubscriber)
状況:
私は、サーバーへのすべてのGET-要求を処理し、エラーを処理するデータプロバイダを持っています。エラーが発生すると、Ionic 2のAlertControllerを呼び出すメソッドが呼び出されます。
これは異なるコンテキストを持つため、このメソッドにアクセスできないという問題があります。 GETリクエストを作成するときにはおそらくチェーンと関連があります。
bind
はこの問題を解決できるようですが、この状況で実装する方法を理解できません。
export class DataProvider
{
constructor(public http : Http,
public alertCtrl: AlertController)
{
}
getArticles(): Promise<any>
{
return this.createHttpRequestGet(this.baseUrl + 'beProduct');
}
private createHttpRequestGet(url: string) : Promise<any>
{
return this.http.get(url, this.getRequestOptions()).map((response) => response.json()).timeout(7500).catch(this.handleError).toPromise();
}
private handleError(error:any)
{
var message = { title: "", text: "" }
switch (error.status)
{
case 401:
// Unauthorized
message.title = "..."
message.text = "... (" + error.status + ").";
break;
...
}
// Can't access variable this
this.showErrorAlertText(error.title, error.message);
return Promise.reject(message);
}
showErrorAlertText(title: string, message: string)
{
this.alertCtrl.create({
title: title,
subTitle: message,
buttons: ['Ok']
}).present();
}
}
これはthis.showErrorAlertText(..,..)
が/どのようにこのプロバイダを使用していますか? – echonax
私は実際にtypescriptを使用しないので、私は答えの代わりにコメントします。自己変数の作成を試みて、コンストラクタでそれを割り当ててみましたか? 'var self = this;'?バインドに固執したい場合は、ここに追加してみてください: 'return this.http.get(url、this.getRequestOptions())。bind(this).map(...)。toPromise();' – belyid