涓嬮潰浠嬬粛涓€涓矞涓轰汉鐭ョ殑observable鈥斺€攄efer锛屽浣曚娇鐢紝浠€涔堟椂鍊欎娇鐢ㄥ湪闃呰鏈枃涔嬪墠锛屼綘闇€瑕佸rxjs鐨勫熀鏈敤娉曟湁涓€瀹氱殑浜嗚В鍋囪鎴戜滑闇€瑕佺紪鍐欒嚜瀹氫箟杩愮畻绗︼紝绉颁负tapOnce銆傛帴鏀朵竴涓嚱鏁颁綔涓哄弬鏁帮紝浠呭湪绗竴娆¤Е鍙戞祦鏃舵墽琛宖unctiontapOnce(fn:Function){letrun=false;returnfunction(source:Observable){returnsource.pipe(tap((data)=>{if(!run){fn(data);run=true;}})锛?};}杩欐浠g爜绠€鍗曠洿瑙傘€傚湪tap鐨勫熀纭€涓婏紝鐢ㄤ竴涓彉閲忔潵鎺у埗鎵ц娆℃暟銆傝皟鐢ㄥ畠consttest$=interval(1000).pipe(tapOnce((d)=>console.log('馃惗',d)));test$.subscribe();//1s鍚庢墦鍗梆煇?銆傞娆¤Е鍙戞祦鏃舵墦鍗版爣棰樸€傛坊鍔犲彟涓€涓闃呰€呮€庝箞鏍凤紵consttest$=interval(1000).pipe(tapOnce((d)=>console.log('馃惗',d)));test$.subscribe();test$.subscribe();//1s鍚庢墦鍗梆煇?鐨勭粨鏋滃彧鎵撳嵃涓€娆★紝鍥犱负涓や釜璁㈤槄鑰呰闃呭悓涓€涓祦骞朵娇鐢ㄥ悓涓€涓繍琛屽彉閲忋€傝鎵撳嵃涓ゆ锛屾垜浠渶瑕佷竴涓粎鍦ㄨ闃呮椂鍒涘缓娴佺殑鍑芥暟銆俤efer鐢ㄤ簬鏀瑰杽杩欎竴鐐广€俧unctiontapOnce(fn:Function){returnfunction(source:Observable){returndefer(()=>{letrun=false;returnsource.pipe(tap((data)=>{if(!run){fn(鏁版嵁);run=true;}}));});};}defer閲囩敤涓€涓嚱鏁帮紝鍏惰繑鍥炵被鍨嬫槸鍙瀵熺殑銆傚彧鏈夊綋defer琚闃呮椂锛屽嚱鏁版墠浼氳鎵ц銆傝€屼笉鏄湪鍒涘缓鏃躲€傜劧鍚庝娇鐢╦s闂寘璁╂瘡涓闃呰€呴兘鏈夎嚜宸辩殑浣滅敤鍩熴€傞€氳繃涓€涓畝鍗曠殑鎶借薄绫籪unctiondefer(observableFactory:()=>ObservableInput)鐪嬬湅defer鏄浣曞疄鐜扮殑;});}defer杩斿洖涓€涓柊鐨勫彲瑙傚療瀵硅薄銆傚綋璁㈤槄鑰呰闃呮椂锛屽伐鍘傛柟娉曞皢琚墽琛屼互鍒涘缓骞惰繑鍥炰竴涓柊鐨勫彲瑙傚療瀵硅薄銆傜湅鐪媎efer鍦ㄥ摢浜涘満鏅笅涔熻兘鍙戞尌浣滅敤銆傚亣璁炬湁杩欐牱涓€涓渶姹傦紝杩斿洖涓€涓殢鏈烘暟constrandNum=of(Math.random());randNum.subscribe(console.log);姣忔璁㈤槄鏃秗andNum.subscribe(console.log);杩欓噷姣忎釜璁㈤槄鑰呮墦鍗扮殑鍊兼槸涓€鏍风殑锛屾垜浠彲浠ヤ娇鐢╠efer鏉ユ敼杩?log);//鐩稿綋浜庤繖绉嶅啓娉昪onstrandNum2=()=>of(Math.random());randNum2().subscribe(console.log);randNum2().subscribe(console.log);鍙︿竴绉嶅満鏅槸鎴戜滑鎯冲欢杩焢romise鐨勬墽琛屾椂闂淬€傛壙璇哄彧鏈夊湪鏈夎闃呰€呮椂鎵嶄細鍏戠幇銆傚疄鐜颁竴涓猯azyPromise//姝ゆ椂console.log('promise')宸茬粡鎵ц瀹屾瘯constpromise=newPromise((resolve)=>{console.log('promise');setTimeout(()=>resolve('promise'),1000);});//console.log('lazypromise');浠呭湪璁㈤槄鏃舵墽琛宑onstlazyPromise=defer(()=>{returnnewPromise((resolve)=>{console.log('lazypromise');setTimeout(()=>resolve('promise'),1000);});});lazyPromise.subscribe(console.log);Promise鏈川涓婃槸鐑棬鐨勶紝骞朵笖浼氬拷鐣ヨ闃呰€呫€傛垜浠彲浠ラ€氳繃defer灏唒romise鍙樻垚绫讳技Observable鐨勪唬鐮侊細https://stackblitz.com/edit/r...