Я абсолютный новичок в rxjs. Чтобы начать учиться мыслить наблюдаемыми, мне нужно переводить концепции с помощью примеров кода. Мне кажется, если я увижу код для этого, я смогу начать делать это самостоятельно с другими концепциями.
Я НЕ хочу ПРЕОБРАЗОВАТЬ обещание в наблюдаемое, я хочу создать новую реализацию с использованием Observable, которая может вести себя как обещание. Как мне переписать следующее, используя Observables?
constructor(){
let makeMessage2 = function(){
return new Promise(resolve, reject){
setTimeout(()=>{
var r = Math.random();
resolve("message two plus random value: " + r );
}, 1000);
}
}
this.logMessageAndResultOfCallback("message one!", makeMessage2);
}
private sideEffect1:string = "";
private sideEffect2:string = "";
logMessageAndResultOfCallback( message1:string, callback:Function ){
console.log(message1);
this.sideEffect1 = message1;
callback().then((message2)=>{
console.log(message2);
this.sideEffect2 = message2;
}
}
Я думаю, что часть, которую я не понимаю, - это как определить функцию «обратного вызова», как ее вызвать. Я понимаю, что дождусь завершения обработки или выдачи обработчиков, таких как makeMessage2().subscribe(message2 => console.log(message2));
, но я понятия не имею, как определить makeMessage2
.
Это может быть совершенно непонятный вопрос, но я прочитал около 10 различных вступлений к rxjs, и это не совсем понравилось. Мне просто нужно сопоставить этот сценарий с наблюдаемым шаблоном, и я думаю, что могу его понять.
По сути, я хочу определить наблюдаемую функцию myObs()
, которая не «выполняется немедленно», а «выполняется» всякий раз, когда выполняется someMethod(message:string,obs:Observable)
. Когда myObs
выполняется, он должен что-то делать в нем ансинхронно (например, получать результат HTTP-запроса), затем устанавливать следующее значение, затем запускать complete (), чтобы мой наблюдатель, определенный в someMethod
, мог обработать завершение и сделать что-то с результатом .
Изменить: меня не интересуют таймер или нативные эквиваленты в rxjs, это просто для имитации любых асинхронных действий, таких как получение данных с сервера.
Observable.create
выполняет функцию подписчика, которая выполняется для всех, кто подписывается. Это не работает для вас? Ваш вопрос не совсем ясен. На сайте документации rxjs есть хороший мастер о том, как начать наблюдение с разных вещей. - person aarosil   schedule 31.03.2017delayTime
- person aarosil   schedule 31.03.2017