Самое чистое (и правильное) решение для кросс-потоковых проблем UI - использовать SynchronizationContext, см. Синхронизация вызовов с пользовательским интерфейсом в статье с несколькими потоками , это очень хорошо объясняет.
Вы можете вставить что-то вроде этой магии:
var k, LAST_OBSERVED_VAL = '';
for (k = response.data.length-1; k >= 0; k--)
{
if (response.data[k][2] == "observed")
{
LAST_OBSERVED_VAL = response.data[k][1];
break;
}
}