【发布时间】:2020-04-15 23:51:58
【问题描述】:
import { Observable } from 'rxjs/internal/Observable';
export function createHttpObservable(url: string) {
console.log('Url is', url);
return Observable.create(observer => {
fetch(url)
.then(response => {
console.log(response);
console.log(response.json());
return response.json();
})
.then(body => {
observer.next(body);
observer.complete();
})
.catch(err => observer.error(err));
});
}
我无法弄清楚为什么在上面的代码中执行没有移动到第二个然后阻塞。浏览器控制台日志如下。
但是,如果我删除 console.log(response.json()); 行,代码可以正常工作。可能这是一个非常基本的问题,但不知何故我无法弄清楚。如果你知道,请帮助我。提前致谢。
【问题讨论】:
-
response.json()是一个承诺,你为什么还要记录它? -
如果你想调试这个,我会先设置
const resp = response.json();,然后再设置console.log(resp); return resp。我找不到文档,但我相信response.json()解决了这个承诺(仔细检查),这就是为什么第二个then语句没有用你给定的代码执行。 -
您是在问为什么 console.log 会破坏代码,或者如何解决这个问题? B/c 'response.json()' 返回一个承诺的事实并不是代码中断的真正原因。
-
如果你使用 Angular,为什么不使用Angular's HTTP?
标签: angular typescript promise rxjs