当我尝试使用过去的事件从我的API中获取一些数据时,结果表明我将数据释放到subscription块之外,我尝试使用不在组件内部的服务来执行此操作,但是我仍然具有相同的行为。
myObject :SomeType;
onPaste(event: ClipboardEvent) {
let clipboardData = event.clipboardData ;
let pastedText = clipboardData.getData('text');
try {
this.http.get(this.rootUrl+'/sometoken/'+pastedText.trim()).subscribe(
res => {
this.myObject = res as SomeType;
console.log('Value1: '+this.myObject.value1);// value here is exist
},
err => {
console.log(err);
});
} catch (error) {
console.log(error)
}
console.log('Value1: '+this.myObject.value1);// value here is undefined!
}
提前谢谢
答案 0 :(得分:1)
使用RxJS时,将使用异步编程。就像使用Promises。
为简单起见,这是一个创建可观察对象的代码段,然后在一秒钟后发出。
const obs = rxjs.of('Async').pipe(
rxjs.operators.delay(1000)
);
let val = '(empty)';
obs.subscribe(value =>{
val = value;
console.log('Inside of subscribe, val = ', val);
});
console.log('Outside of subscribe, val = ', val);
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.5.2/rxjs.umd.js"></script>
如您所见,它仅在订阅回调中有效。同样,为简化操作和解决问题,请在需要数据时考虑仅回调是最新的。
如果您希望使用Angular(和RxJS隐式地)工作,我敦促您阅读the documentation,因为如果不理解Angular,将很难使用该框架!