如何在此代码段中的subscribe()上获取计数器变量的值?
update table SET c1=1 AND c2=2
在订阅事件之前的控制台上,它返回计数器的正确值,但在subscribe中,它始终是计数器变量的最后一个值。 我试图使用bind(),并通过创建的函数传递计数器但没有成功。这是范围的问题,但我无法弄清楚如何解决它。
答案 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
。