Javascript 如何模仿“a”;“有承诺的回访”;rxjs中的函数参数?
我绝对是rxjs的初学者。对于我来说,要开始学习在可观察事物中思考,我需要通过代码示例来翻译概念。我觉得如果我能看到这方面的代码,我就可以开始用其他概念自己做这件事 我不想把一个承诺转换成一个可观察的,我想用一个可观察的来做一个新的实现。我将如何使用可观测数据重新编写以下内容Javascript 如何模仿“a”;“有承诺的回访”;rxjs中的函数参数?,javascript,rxjs,reactive-programming,observable,Javascript,Rxjs,Reactive Programming,Observable,我绝对是rxjs的初学者。对于我来说,要开始学习在可观察事物中思考,我需要通过代码示例来翻译概念。我觉得如果我能看到这方面的代码,我就可以开始用其他概念自己做这件事 我不想把一个承诺转换成一个可观察的,我想用一个可观察的来做一个新的实现。我将如何使用可观测数据重新编写以下内容 constructor(){ let makeMessage2 = function(){ return new Promise(resolve, reject){ setT
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()
,它不“立即执行”,而是在执行somethod(message:string,obs:observable)
时“执行”。当执行myObs
时,它应该在其中同步执行某些操作(如获取HTTP请求的结果),然后设置下一个值,然后触发complete(),这样我在someMethod
中定义的观察者就可以处理完成的操作,并对结果进行处理
编辑:我不关心rxjs中的计时器或本机等价物,这只是为了模拟任何异步操作,比如从服务器获取数据 您编写并希望“翻译”为可观察对象的代码可能无法工作callback
是一个承诺,而不是一个函数,因此您不能编写callback()
你也试过这个吗?这对很多人都有效
要回答你的问题,你可以写
Rx.Observable.of(""message one!", "message two!")
.map(console.log.bind(console)) // would be better to use `do` operator actually, for semantic reasons, but that works the same here
.subscribe(noop, noop, noop)
或
其中noop
是一个不做任何事情的函数,即function noop(){}
简言之,您的流发出数据,该数据流通过一系列操作符,数据流由.subscribe
启动。在您的情况下,订阅没有什么有趣的事情要做,因为您所做的只是日志记录
Rxjs流实际上是基于回调的。您需要检查以了解它。我在向导的帮助下解决了它
Oops,意味着生成一个返回承诺的函数。编辑代码。我想这不是我要找的。预期的用例是一个具有一些初始副作用(logs message1)的函数,需要使用异步解析调用“回调”。该回调的解析需要调用回调函数内部不可知的行为/副作用。我不是简单地打印两条信息。不,我需要副作用。你的例子做不到这一点。我只是让我的例子有具体的副作用来说明。我添加了我的尝试。这似乎与我提出的模式相匹配吗?可观察。create
接受订户函数——它对订户执行。这对你不管用吗?你的问题不是很清楚。在rxjs文档网站上,有一个很好的向导,介绍如何从不同的东西开始观察“承诺回调模式”,这也很混乱。。通常这是异步代码的两种不同方法,因此,我最终做了自己的尝试。这看起来正确吗?确切地说,这可能是两种异步行为。在我的用例中,它是在“回调”计算完成后关闭UI项,但在用户操作之前不调用回调。是的,这就是我的意思。仅供参考,但对于这个示例,尽管您根本不需要设置超时,但有内置的rx操作符delayTime
Rx.Observable.of(""message one!", "message two!")
.subscribe(console.log.bind(console), noop, noop)
import {Observable} from 'rxjs';
var makeMessage2 = Observable.create(observer => {
// Yield a single value and complete
setTimeout(function(){
let r = Math.random();
observer.next("message two plus random value: " + r );
observer.complete();
}, 1000);
return () => console.log('disposed')
});
logMessageAndResultOfCallback( "some message one", makeMessage2);
logMessageAndResultOfCallback( message1:string, callback:Observeable ){
console.log(message1);
this.sideEffect1 = message1;
var subscription = callback.subscribe(
(value)=>{this.sideEffect2 = value;},
(e) =>{ console.log('onError: %s', e)},
() => {console.log(this.sideEffect2);});
subscription.dispose();
}