无法使用 ionic 2 中的一个订阅函数订阅数据



这是我的获取方法。

get(url: string, options?: RequestOptionsArgs): Promise<Observable<{}>> {
return new Promise((resolve, reject) => {
this._frotzOptions(url, options).then((data) => {
if (data) {
resolve(this.http.get(url, data));
} else
resolve(false);
}).catch((err) => {
reject(err);
});
});
}

_frotzOptions方法。

private _frotzOptions(urlo: string | Request, options: RequestOptionsArgs): Promise<{}> {
if (!options) {
options = {}
}
if (!options.headers) {
options.headers = new Headers();
}
return new Promise((resolve, reject) => {
this.storage.get('token').then(token => {
options.headers.append('Content-Type', 'application/json');
options.headers.append('Authorization', 'Bearer ' + token);
if (token) {
resolve(options);
}
else
resolve(false);
}).catch((err) => {
reject(err);
});
});
}

首页

var subscription = Observable.fromPromise(this.ahttp.get(url));
subscription.subscribe((data) => {
data.subscribe(rsp => {
console.log("rsp", rsp);
})
}, (err) => {
console.log(err)
});

当我需要使用通过 get 方法解析的数据时,我必须在订阅中使用订阅!使用订阅的最佳方法是什么!任何建议!谢谢!

嗨,你为什么不这样做:

private _frotzOptions(urlo: string | Request, options: RequestOptionsArgs): Observable<any> { //<--!! CHANGE TO OBSERVABLE from Rx/rx
if (!options) {
options = {}
}
if (!options.headers) {
options.headers = new Headers();
}
return new Promise((resolve, reject) => {
this.storage.get('token').then(token => {
options.headers.append('Content-Type', 'application/json');
options.headers.append('Authorization', 'Bearer ' + token);
if (token) {
resolve(options);
}
else
resolve(false);
}).catch((err) => {
reject(err);
});
});

然后当你想使用它时:

this.ahttp.get(url).subscribe((data) => {
data.subscribe(rsp => {
console.log("rsp", rsp);
})
}, (err) => {
console.log(err)
});

最后...要在请求中使用INTERCEPTOR注入您的持有者令牌...也许有一些插件,例如:

https://www.npmjs.com/package/angular2-http-interceptor

在另一个承诺/可观察对象上使用新的 promise 构造函数是一种反模式。 转换您的可观察内容并返回它。

您的get功能可以简化为:

get(url: string, options?: RequestOptionsArgs): Promise<{}> {
return this._frotzOptions(url, options).then((data) => {
if (data) {
return this.http.get(url, data).toPromise(); //use Observable toPromise function
} else
return false;
}).catch((err) => {
console.log(err); // handle error
});
}

您的_frotzOptions功能:

private _frotzOptions(urlo: string | Request, options: RequestOptionsArgs): Promise<{}> {
if (!options) {
options = {}
}
if (!options.headers) {
options.headers = new Headers();
}
return this.storage.get('token').then(token => {
options.headers.append('Content-Type', 'application/json');
options.headers.append('Authorization', 'Bearer ' + token);
if (token) {
return options;
}
else
return false;
});
}

这称为承诺链接

相关内容

  • 没有找到相关文章