我真的很困惑,不知道有没有人能帮我理解angular 2rxjs中的.subscribe。
如果我有一个带按钮的页面来提交一些表单数据,我需要订阅才能发布信息或使用promise吗?
因为我的理解是,当你订阅的时候,你再次点击按钮,你就会有2个订阅的实例,依此类推。现在我知道你要说什么了,好吧,你可以在销毁中删除订阅,或者其他什么,但这不是我的问题。
我的问题是,如果表单在您单击主页按钮之前从未销毁,并且表单在提交时被清除,以便提交更多数据,我是否需要使用Promise over Subscribe?因为订阅(据我所知)就像一份时事通讯,你点击订阅的次数越多,你收到的时事通讯就会越多。
那么,在没有多个订阅的情况下,哪种方法最好反复提交数据呢?
myObsFunc(dataToSend).subscribe(err => console.log(err),() => console.log(success));
或
myObsFunc(dataToSend).toPromise().then().catch(e => console.log(e));
发布于 2018-03-24 16:05:52
观察者是懒惰的,你可以把懒惰的观察者看作时事通讯。为每个订阅者创建一个新的时事通讯。然后,它们只被发送给这些人,而不是其他任何人。
随着时间的推移,可观察值可以有多个值。如果您保持对时事通讯的订阅处于打开状态,则会时不时地获得一个新的值。发件人决定你什么时候收到它,但你所要做的就是等待,直到它直接进入你的收件箱。
如果你来自promises的世界,这是一个关键的区别,因为promises总是只返回一个值。另一件事是可观察到的是可取消的。如果你不再想要你的时事通讯,你可以取消订阅。对于承诺,这是不同的,你不能取消承诺。如果承诺交给了您,那么将生成该承诺的解决方案的过程已经在进行中,并且您通常没有权限阻止该承诺的解决方案执行。
发布于 2018-03-24 06:45:18
可观察性是流数据。希望这段代码能帮助你理解这一点。
import {timer} from "rxjs/observable/timer";
let observable = timer(1, 1000); //timer will emit an event each second
let subscribtion = observable.subscribe((data) => {
//do stuff for each tick of stream data
console.log(data);
}, (reason) => {
//when there was an error while watching observable
}, () => {
//do stuff when stream is complete
});
//when you need to unsubscribe from this events you can call
subscribtion.unsubscribe();https://stackoverflow.com/questions/49459150
复制相似问题