如何获取subscribe范围的变量值?

时间:2018-03-28 14:08:15

标签: google-maps typescript scope

如何在此代码段中的subscribe()上获取计数器变量的值?

update table SET c1=1 AND c2=2

在订阅事件之前的控制台上,它返回计数器的正确值,但在subscribe中,它始终是计数器变量的最后一个值。 我试图使用bind(),并通过创建的函数传递计数器但没有成功。这是范围的问题,但我无法弄清楚如何解决它。

1 个答案:

答案 0 :(得分:0)

您的问题是subscribe中对回调的调用是异步的,而for循环的执行则不是。您的回调使用counter变量进行闭包,而不是其值。但是counter发生了变化。在回调之前,您传递给subscribe可执行一次,您的循环已完成且counter已更改。当这些回调执行时,当您致电goToSlide时,您始终会获得最新的可用值。

您需要制作属于传递给then的回调范围的该值的本地副本:

 }).then(marker => {     
     console.log(counter);   
     let _counter = counter; // local copy                            
     marker.on(GoogleMapsEvent.MARKER_CLICK).subscribe(() => {                       
         this.goToSlide(_counter);                        
     });
     counter++;
 }); 

现在,subscribe中的箭头函数每次都绑定到不同的_counter变量,_counter永远不会被修改,因此您可以获得所需的值。

我还在that内将this更改为subscribe,因为箭头函数的this会自动绑定到定义范围内的this。所以不需要that