嵌套httpService.get调用无法使用Observable值——竞态条件问题
问题分析与解决方案
你遇到的问题根本不是竞态条件,而是请求配置对象的语法错误:在headers2对象中,headers和params属性之间缺少了逗号,导致params没有被正确解析为独立属性,最终GET请求没带上stateID参数。
修正后的代码
const cities = this.httpService.post('https://getAlldata/getStates', body, headers).pipe( switchMap((stateResponse: AxiosResponse<any>) => { console.log(stateResponse.data.stateId) // stateId正常打印 const headers2 = { headers: { Authorization: `Bearer ${token}` }, // 补上缺失的逗号 params: { stateID: stateResponse.data.stateId } } return this.httpService.get(URL, headers2); }), map((resp2: AxiosResponse<any>) => { return resp2.data }), )
为什么之前的尝试无效?
你测试的mergeMap、concatMap、Promise转换等方法都是用来处理异步流程的,但你的异步逻辑本身没问题——switchMap会严格等待POST请求完成后再执行GET请求,console能打印stateId也证明这一点。问题出在配置对象的语法错误,导致params没有被正确传递给GET请求,所以不管怎么调整异步操作符都没用。
硬编码stateId时如果语法正确(比如当时补上了逗号),请求就能正常发送;添加延迟只是无意义的操作,本质上还是语法错误没被修正时的巧合(或者你当时调整代码时不小心修正了语法)。
内容的提问来源于stack exchange,提问作者Akki
相关产品推荐
相关产品推荐

