Angular 异步管道链接到新创建的可观察对象时失败

Angular 异步管道链接到新创建的可观察对象时失败,angular,typescript,rxjs,Angular,Typescript,Rxjs,将异步管道附加到新创建的可观察对象时,会出现错误 "Cannot read property 'subscribe' of undefined" 下面是一个Plunkr演示我所说的内容: 不过,如果我不发表意见的话 private asyncList: Observable<string[]> = new Observable<string[]>(); private-asyncList:Observable=new-Observable(); 以及联合国的评论

将异步管道附加到新创建的可观察对象时,会出现错误

"Cannot read property 'subscribe' of undefined"
下面是一个Plunkr演示我所说的内容:

不过,如果我不发表意见的话

private asyncList: Observable<string[]> = new Observable<string[]>();
private-asyncList:Observable=new-Observable();
以及联合国的评论

//private asyncList: Observable<string[]>;
//私有异步列表:可观察;
然后页面将毫无问题地加载。也许我遗漏了一些显而易见的东西,但这让我感到困惑

这个Plunkr是从其他人那里得到的,我做了最少的工作来演示错误,所以请原谅您看到的任何奇怪的命名或做法。

使用
new Observable()
与调用
Observable.create()
相同,这意味着您需要为它提供一个“订阅”函数,该函数在订阅时向观察者发送值。例如:

private asyncList = new Observable<string[]>(o => o.next('Hello'));
private asyncList=newobservable(o=>o.next('Hello');
请注意,演示中的错误是抛出在可观察对象中,而不是抛出在管道本身中


事实上,我很惊讶的发现。我不知道有任何用例会忽略它…

您不会通过执行
newobservable()
来创建一个observable。您可以执行类似于
Observable.create((o)=>{})
的操作。但我想你可能想要一个主题,这样你就可以在上面发出值。不清楚你的用法。编辑:看起来做新的Observable只是调用@martin提到的Observable.create(),所以这似乎不一定是不好的做法。哦,酷。我找不到任何关于更新它的文档,以前也没有见过任何人这样做:)我不知道
newobservable()
与调用
Observable.create()
是一样的,这很有意义。对我来说奇怪的是,如果我将属性保留为
private asyncList:Observable那么它一点也不适合吗?在这种情况下,
asyncList
不是未定义的吗?另外,为什么不只是执行一个
newobservable()
然后再订阅它就会抛出一个错误?
null
是一个有效值(),因为您可能只想取消订阅以前的Observable(),而不执行任何操作。这就是为什么
null
不会抛出任何内容。这个错误是从这里抛出的,所以它不是一个预期的状态(无论如何,这个可观察到的是什么?);我以为你可以创建一个无需订阅的可观察对象,然后仍然订阅它,但这实际上抛出了完全相同的错误。我将observable用作组件的
@Input()
属性,但我不想在使用它之前检查它是否已定义,所以我给了它一个初始值,但看起来模板绑定将在从父级检索该值之前发生,因此它会抛出一个错误。我现在明白了。非常感谢。