Невозможно передать параметр в подписку, подписка - это функция обратного вызова, которая будет выполняться при отправке каждого значения в наблюдаемой последовательности.Чтобы понять, как работает наблюдаемый, посмотрите на приведенный ниже пример кода
var observable = Observable.create(function(observer) {
var sum = 0;
for (var i = 1; i <= 4; i++) {
if (i <= 3) {
sum = sum + i;
observer.next(i); //You can emit each item from the observable also
}
if (i === 4) {
setTimeout(
i => {
observer.next(sum);
observer.complete();
},
5000,
i
);
}
}
});
. В этом примере кода я запускаю цикл for и генерирую каждое значение, используя наблюдающий.next (значение), когда значениеесли я становлюсь 4, вы можете увидеть, как вы выпустите сумму из 3 чисел и выйдете из всей наблюдаемой последовательности простым вызовом observable.complete ();
Observables являются ленивыми, что означает, что приведенный выше код никогда не выполняется, если выподписываем его.
Давайте подпишемся, чтобы получить каждое значение.Я удаляю выражение lamda для более ясного понимания
observable.subscribe({
next: function(x) {
console.log("got value " + x);
},
error: err => console.error("something wrong occurred: " + err),
complete: function() {
//when I become 4 it will complete
console.log("completed");
}
});
В функции обратного вызова next вы получите все значения, которые мы получили из наблюдаемой, включая сумму в качестве конечного значения, а затем она выполнит полный обратный вызовфункция.
Вы можете просто получить каждое значение, как и приведенный ниже синтаксис, что аналогично следующему обратному вызову
observable.subscribe(function(x) {
//here you will get all the value including sum
console.log(x);
});
Позвольте мне рассказать вам еще один сценарий с тем же примером, просто прокомментировав одну строкукод.Я не испускаю каждое значение, а хочу выпустить сумму только из наблюдаемого и полного.
var observable = Observable.create(function(observer) {
var sum = 0;
for (var i = 1; i <= 4; i++) {
if (i <= 3) {
sum = sum + i;
//commented the code
}
if (i === 4) {
setTimeout(
i => {
observer.next(sum);
observer.complete();
},
5000,
i
);
}
}
});
Теперь, когда вы подписываетесь, у вас будет только одно значение, то есть сумма
observable.subscribe(function(x) {
//here you will get the sum
console.log(x);
});
Теперь, возвращаясь к вашему вопросу, для передачи параметра вы можете свернуть все наблюдаемое вк функции, которая возвращает наблюдаемое.Например,
SomeObservableFunction(someparam){
var observable = Observable.create(function(observer) {
//I am not writing the same code block here
});
return observable;
}
Когда вы подписываетесь, вы можете передать значение функции не подписаться и сделать что-то с параметром
SomeObservableFunction(10).subscribe(function(x){
});