Как установить контекст для функции обратного вызова подписки rxjs?

У меня такая подписка:

this.test.subscribe(params => { 
  ...some code
});

Если я передаю функцию обратного вызова вместо функции стрелки, контекст отсутствует.

Я хочу связать контекст с функцией подписки, но я этого никогда не вижу. можно ли обойтись без создания чего-то вроде

that = this


person Santiago Blanco Vilchez    schedule 09.08.2016    source источник
comment
Что вы имеете в виду под context? Вы имеете в виду переменные в области вокруг subscribe? Или это специфичное для Angular понятие?   -  person Ptival    schedule 10.08.2016
comment
Средние переменные в области видимости.   -  person Santiago Blanco Vilchez    schedule 10.08.2016


Ответы (1)


Я попытаюсь ответить, но я все еще не совсем уверен, что вы имеете в виду.

Когда вы пишете:

const v = 42;
observable.subscribe(x => {
  // here you have access to `v`
});

Но когда вы пишете:

{
  const v = 42;
  observable.subscribe(f);
}

function f(x) {
  // here you do not have access to `v`
}

Так и должно быть. Если вы хотите, чтобы f видел переменные, которые не находятся в области его объявления, вы должны сделать их аргументами и передать их соответствующим образом. Например:

{
  const v = 42;
  observable.subscribe(x => f(x, v));
}

function f(x, v) {
  // here you **do** have access to `v`
}

Или, если вы можете определить обратный вызов в контексте переменной, которую вы хотите захватить:

{
  const v = 42;
  observable.subscribe(x => f(x));
  function f(x) {
    // here you **do** have access to `v` because it is in scope
  }
}

Отвечает ли это на ваш вопрос? Это не имеет ничего общего с RxJS, это чисто концепции JavaScript (и языков программирования).

person Ptival    schedule 10.08.2016