![](/img/trans.png)
[英]How to turn this promise based function into rxjs function?
[英]How to mimic a “callback with promise” function parameter in rxjs?
我是絕對的rxjs初學者。 為了讓我開始學習觀察性思維,我需要通過代碼示例來翻譯概念。 我覺得如果可以看到它的代碼,就可以與其他概念一起開始這樣做。
我不想轉換一個承諾可觀察到的,我要讓使用而觀察到的新的實現,可以表現得像一個承諾。 如何使用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
。
這可能是毫無頭緒的問題,但是我已經閱讀了有關rxjs的10個不同的簡介,而這還沒有完全被點擊。 我只需要將此場景映射到可觀察的模式,我想我就可以理解。
基本上,我想定義一個可觀察函數myObs()
,它不會“立即執行”,而是在執行someMethod(message:string,obs:Observable)
時“執行”。 當執行myObs
,它應該在其中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)
要么
Rx.Observable.of(""message one!", "message two!")
.subscribe(console.log.bind(console), noop, noop)
其中noop
是不執行任何noop
的函數,即function noop(){}
簡而言之,您的流發出數據,該數據流通過一系列運算符,並且數據流由.subscribe
啟動。 對於您的情況,您對訂閱沒有任何興趣,因為您所做的只是日志記錄。
Rxjs Streams實際上是基於后台的回調。 您想查看此答案以了解它。
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();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.