这是我的堆栈http.get的代码,它会检索一个对象,然后检索对象的详细信息:
getDetails(sysID:string){
console.log("entered getDetails");
var details;
this.http.get('https://blahURL').map(res => res.json()).subscribe(
(data) => details = data, // Reach here if res.status >= 200 && <= 299
(err) => console.log(err), // Reach here if fails
()==>{ // On completion
console.log("reached end of first get");
this.http.get(...).map(res2 => res2.json()).subscribe(
(data2) => {return data2;
...
这是通过console.log(getDetails(sysID));
调用的。所以我期望的是当第二个this.http.get()收到一个结果时,它会被传递给调用者并在控制台中打印出来。
但是,我在控制台中得到的是:
entered getDetails
然后undefined
,仅在reached end of first get
我如何强制它等待第二个http.get结果?
答案 0 :(得分:1)
你想要等待第二个请求,直到返回响应,所以你应该做(链接两个调用) 见(How to chain Http calls in Angular2)。
答案 1 :(得分:0)
除了在完成事件中处理它之外,如果对象为空或未定义,您还可以添加skipWhile
以防止subscription
this.http.get('https://blahURL').map(res => res.json())
.skipWhile(data=> {if(data) return true;}) ///////////////////////
.subscribe(
(data) => details = data, // Reach here if res.status >= 200 && <= 299
(err) => console.log(err), // Reach here if fails
()==>{ // On completion
console.log("reached end of first get");
this.http.get(...).map(res2 => res2.json()).subscribe(
(data2) => {return data2;
...
因此,在第一个订阅中,将按照skipWhile跳过它。第二次订阅它将拥有数据,相应的流程将按原样