有人知道是否有机会从商店获得价值,然后致电Angular HTTP服务?请参见下面的示例。提前致谢。
我有一个使用异步方法的服务。在此方法中,我调用Angular HTTP服务,但是在调用Angular HTTP服务之前,我想从商店(Oauth访问令牌)检索一些值。问题是我将Oauth令牌存储在商店中,我必须将令牌添加到请求中。如果服务器响应401错误,则我刷新令牌并重复请求或新令牌请求。
@Injectable()export class Interceptor { public get(request: Request): Observable<any> { return this.store.select((s) => s.session.accessToken) // tried .switchMap, it wasn't working for multiple requests // .flatMap also is not working // commented below is working but I don't think that it is right solution // return Observable.of(request) // .withLatestFrom(this.store.select((s) => { // return s.session.accessToken // })) // .flatMap(([config, accessToken]) => { ... }) .flatMap((accessToken) => { request.headers.set("Authorization", `Bearer ${accessToken}`); return this.http.request(request); }) .map((response) => { return response.json(); }) .catch((response) => { return this.handleError(response, request); }); } // handle errors private handleError(response: Response, request: Request): Observable<Response> { // handle outdated api tokens if (response.status === HttpStatusesEnum.Unauthorized) { const deferredRequest = new DeferredRequestModel({ request }); // appends HTTP request configuration object with deferred response // attached to buffer this.buffer(deferredRequest ); return deferredRequest.observable; } // handle server error if (response.status === HttpStatusesEnum.InternalServerError) { ... } ... return Observable.throw(response); }}export class DeferredRequestModel { public observable: AsyncSubject<Response>; public request: Request; constructor(obj?: Partial<DeferredRequestModel>) { this.observable = new AsyncSubject<Response>(); this.request = obj && obj.request || null; } public reject(error?: any): void { this.end({ isValue: false, value: error }); } public resolve(value?: any): void { this.end({ isValue: true, value }); } private end(result: any): void { if (this.observable.isStopped) { console.warn("Deferred already resloved/rejected."); return; } if (result.isValue) { this.observable.next(result.value); this.observable.complete(); } else { this.observable.error(result.error); } }}然后,当我致电某些服务时,它将通过Interceptor发送请求。
export class SomeEffect { constructor(private someService: SomeService) {} @Effect() public someMethod(): Observable<Action> { return this.actions$.ofType(SOME_ACTION_GET) .map((action: SomeActions.Get) => action.payload) .switchMap((someObj) => { // someMethod call interceptor inside someService, it won't call angular // http service directly return this.someService.someMethod(someObj); }) .map((someResult) => { return new SomeActions.GetSuccess(someResult); }); }}我尝试在拦截器中使用switchmap,但是如果拦截器被称为多次一次,则它将无法使用。
我会做这样的事情:
return this.store.select(reducers.getAccessToken) .take(1) .switchMap(token => { const headers = new Headers(); headers.append('Authorization', `Bearer ${token}`); return this.http.get('...', { headers }); });这 getAccessToken 方法是在全局还原文件中使用的方法 reselect 这边走:
export const getAccessToken = createSelector( getAuthState, authReducer.getToken);我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion在首页我有:汽车:VolvoSaabMercedesAudistatic_pages_spec.rb中的测试代码:it"shouldhavetherightselect"dovisithome_pathit{shouldhave_select('cars',:options=>['volvo','saab','mercedes','audi'])}end响应是rspec./spec/request
我正在尝试将以下SQL查询转换为ActiveRecord,它正在融化我的大脑。deletefromtablewhereid有什么想法吗?我想做的是限制表中的行数。所以,我想删除少于最近10个条目的所有内容。编辑:通过结合以下几个答案找到了解决方案。Temperature.where('id这给我留下了最新的10个条目。 最佳答案 从您的SQL来看,您似乎想要从表中删除前10条记录。我相信到目前为止的大多数答案都会如此。这里有两个额外的选择:基于MurifoX的版本:Table.where(:id=>Table.order(:id).
我有一个集合选择:此方法的单选按钮是什么?谢谢 最佳答案 Rails3中没有这样的助手。在Rails4中,它是collection_radio_buttons. 关于ruby-on-rails-rails上的ruby:radiobuttonsforcollectionselect,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/18525986/
是否可以为单个ActiveRecord实例添加回调?作为进一步的限制,这是继续使用库,所以我无法控制该类(除了对其进行猴子修补)。这或多或少是我想做的:defdo_something_creazymessage=Message.newmessage.on_save_call:do_even_more_crazy_stuffenddefdo_even_more_crazy_stuff(message)puts"Message#{message}hasbeensaved!Hallelujah!"end 最佳答案 你可以通过在创建对象后立
我喜欢RVM。我意识到它的主要用例是让不同的用户在不同版本的Ruby之间切换。但是假设我正在将Rails应用程序部署到服务器,并且我只想运行单个版本的Ruby。特别是,我想要1.9.2,用RVM安装它很容易,但没有它就很痛苦。有没有一种方法可以让我说“我希望这是所有用户的规范Ruby安装”(连同它的所有gem),而不必手动创建一堆符号链接(symboliclink)并在每次更新到更新时更改它们Ruby版本? 最佳答案 以root身份安装RVM并执行sudorvmuse1.9.2--default。任何采购/usr/local/rvm
date_select方法只能设置:start_year,但我想设置开始日期(例如3个月前的日期)(但没有这样的选项)。那么,我可以将开始日期设置为date_select方法吗?或者,要制作这样的选择框,我应该使用select_tag和options_for_select吗?或者,有什么解决办法吗?谢谢, 最佳答案 有可能……例如:start_year–设置年份选择的开始年份。默认为Time.now.year-5参见thisresource. 关于ruby-Rails3-我可以将开始日期
如何在Ruby中扩展date_select的范围??它只显示2005年,我想用它作为出生日期。 最佳答案 您可以使用:start_year选项,参见thedocumentation. 关于ruby-on-rails-date_selectruby,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/2047739/
许多正则表达式引擎在单行字符串中匹配.*两次,例如,在执行基于正则表达式的字符串替换时:根据定义,第一个匹配项是整个(单行)字符串,正如预期的那样。在许多引擎中有第二个匹配项,即空字符串;也就是说,即使第一个匹配项消耗了整个输入字符串,.*仍会再次匹配,然后匹配输入字符串末尾的空字符串。注意:要确保只找到一个匹配项,请使用^.*我的问题是:这种行为有充分的理由吗?一旦输入字符串被完全使用,我不希望再次尝试找到匹配项。除了反复试验之外,您能否从支持的文档/正则表达式方言/标准中收集到哪些引擎表现出这种行为?更新:revo'shelpfulanswer解释当前行为的方式;至于潜在的原因,请
我正在尝试将Rails3.0应用程序升级到Rails4.0。我注意到的行为之一是模型之间的关系停止工作。假设我们有以下模型:classStudent:teacher_students,:select=>'teacher_students.met_with_parent,teachers.*'#TheRails4syntaxhas_many:teachers,->{select('teacher_students.met_with_parent,teachers.*')},:through=>:teacher_studentsendclassTeacher:teacher_student