亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

JS?Angular?服務(wù)器端渲染應(yīng)用設(shè)置渲染超時時間???????

 更新時間:2022年06月27日 09:13:37   作者:??JerryWang_sap????  
這篇文章主要介紹了JS?Angular服務(wù)器端渲染應(yīng)用設(shè)置渲染超時時間,???????通過setTimeout模擬一個需要5秒鐘才能完成調(diào)用的API展開詳情,需要的小伙伴可以參考一下

我們用 setTimeout 模擬一個需要 5 秒鐘才能完成調(diào)用的 API:

const express = require('express');
const app = express();
app.get('/api/fast', (req, res) => {
  console.log('fast endpoint hit');
  res.send({response: 'fast'});
});
app.get('/api/slow', (req, res) => {
  setTimeout(() => {
      console.log('slow endpoint hit');
      res.send({response: 'slow'});
  }, 5000);
});
app.listen(8081, () => {
  console.log('Listening');
});

然后新建一個 Angular service,調(diào)用這個 /api/slow:

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';
@Injectable({
 providedIn: 'root'
})
export class CustomService {
 constructor(private http: HttpClient) {}
 public getFast(): Observable<any> {
   return this.http.get<any>('http://localhost:8081/api/fast');
 }
 public getSlow(): Observable<any> {
   return this.http.get<any>('http://localhost:8081/api/slow');
 }
}

在服務(wù)器端渲染模式下,等待這個 API 調(diào)用的返回,至少需要花費(fèi) 5 秒鐘。我們可以給這個 API 調(diào)用設(shè)置一個超時機(jī)制。如果服務(wù)器端渲染時超過我們指定的超時間隔,還沒有得到 API 響應(yīng),我們就放棄這次 API 調(diào)用,讓其在客戶端渲染模式下繼續(xù)進(jìn)行。

我們使用 RouteResolver 來實現(xiàn)。

從 Angular route 框架導(dǎo)入 router

import { Resolve } from '@angular/router';

從 Angular common 開發(fā)包導(dǎo)入 Angular 運(yùn)行環(huán)境監(jiān)測的 API:

import { isPlatformBrowser } from '@angular/common';

導(dǎo)入 injection token,獲得當(dāng)前運(yùn)行的 platform id:

import { Injectable, Inject, PLATFORM_ID } from '@angular/core';

新建一個 service class:

import { Injectable, Inject, PLATFORM_ID } from '@angular/core';
import { Resolve } from '@angular/router';
import { Observable, timer } from 'rxjs';
import { isPlatformBrowser } from '@angular/common';
import { CustomService } from './custom.service';
import { takeUntil } from 'rxjs/operators';
@Injectable({
 providedIn: 'root'
})
export class SlowComponentResolverService implements Resolve<any> {
 constructor(private service: CustomService, @Inject(PLATFORM_ID) private platformId: any) { }
 public resolve(): Observable<any> {
   if (isPlatformBrowser(this.platformId)) {
     return this.service.getSlow();
   }

如果當(dāng)前應(yīng)用運(yùn)行于瀏覽器端,上圖的 isPlatformBrowser(this.platformId) 返回 true,因此直接調(diào)用慢速 API.

否則創(chuàng)建一個 Observable,500 毫秒后發(fā)射值:

const watchdog: Observable<number> = timer(500);

我們將這個 watchDog Observable 通過 pipe 設(shè)置到 this.service.getSlow 的下游。這樣,如果 this.service.getSlow() 返回的 Observable 在 500 毫秒之內(nèi)不 emit 值的話,watchdog 就會向 Component push null 值,否則,API 的真實 response 會推送給 Component.

我們需要更新應(yīng)用相關(guān)的 routing 代碼來消費(fèi)這個 Resolver.

給 slowComponent 分配一個 resolver:

const routes: Routes = [
{path: '', redirectTo: 'fast', pathMatch: 'full'},
{path: 'fast', component: FastComponent},
{path: 'slow', component: SlowComponent, resolve: {response: SlowComponentResolverService}}
];

在 slowComponent 的實現(xiàn)代碼里,從分配的 Route resolver 里讀取 API response 數(shù)據(jù):

import { Component } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
@Component({
selector: 'app-slow',
template: `
  <p>
    Response is: {{response | json}}
  </p>
`,
styles: []
})
export class SlowComponent {

public response: any = this.router.snapshot.data.response;
constructor(private router: ActivatedRoute) {}
}

注意這里并沒有直接訪問 Route Resolver:this.router.snapshot.data.response

當(dāng) API 在 500 毫秒之內(nèi)返回時,所有的 slowComponent 源代碼都由服務(wù)器端生成:

當(dāng) API 500 毫秒未能成功返回數(shù)據(jù),則客戶端會再次調(diào)用該 API,然后在客戶端完成渲染:

到此這篇關(guān)于JS Angular 服務(wù)器端渲染應(yīng)用設(shè)置渲染超時時間的文章就介紹到這了,更多相關(guān)JS Angular 服務(wù)器端渲染內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • iview通過Dropdown(下拉菜單)實現(xiàn)的右鍵菜單

    iview通過Dropdown(下拉菜單)實現(xiàn)的右鍵菜單

    這篇文章主要介紹了iview通過Dropdown(下拉菜單)實現(xiàn)的右鍵菜單 ,需要的朋友可以參考下
    2018-10-10
  • vue組件創(chuàng)建的三種方式小結(jié)

    vue組件創(chuàng)建的三種方式小結(jié)

    這篇文章主要介紹了vue組件創(chuàng)建的三種方式小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • JS操作COOKIE實現(xiàn)備忘記錄的方法

    JS操作COOKIE實現(xiàn)備忘記錄的方法

    這篇文章主要介紹了JS操作COOKIE實現(xiàn)備忘記錄的方法,涉及JavaScript針對cookie的讀寫操作相關(guān)技巧,需要的朋友可以參考下
    2016-04-04
  • 詳解微信小程序中組件通訊

    詳解微信小程序中組件通訊

    在本篇文章里我們給大家分享了微信小程序中組件通訊的相關(guān)知識點(diǎn)以及相關(guān)實例代碼,有興趣的朋友們學(xué)習(xí)分享下。
    2018-10-10
  • 詳解Webpack4多頁應(yīng)用打包方案

    詳解Webpack4多頁應(yīng)用打包方案

    這篇文章主要介紹了詳解Webpack4多頁應(yīng)用打包方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • 基于Javascript實現(xiàn)倒計時功能

    基于Javascript實現(xiàn)倒計時功能

    這篇文章主要為大家詳細(xì)介紹了基于Javascript實現(xiàn)倒計時功能的相關(guān)資料,感興趣的小伙伴們可以參考一下
    2016-02-02
  • Javascript Promise用法詳解

    Javascript Promise用法詳解

    這篇文章主要介紹了Javascript Promise用法詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • script不刷新頁面的聯(lián)動前后代碼

    script不刷新頁面的聯(lián)動前后代碼

    如何實現(xiàn)script不刷新頁面的聯(lián)動,在本文有個不錯的示例或許對大家有所幫助
    2013-09-09
  • JS對img標(biāo)簽進(jìn)行優(yōu)化使用onerror顯示默認(rèn)圖像

    JS對img標(biāo)簽進(jìn)行優(yōu)化使用onerror顯示默認(rèn)圖像

    這篇文章主要介紹了JS對img標(biāo)簽進(jìn)行優(yōu)化使用onerror顯示默認(rèn)圖像,需要的朋友可以參考下
    2014-04-04
  • JS中移除非數(shù)字最多保留一位小數(shù)

    JS中移除非數(shù)字最多保留一位小數(shù)

    這篇文章主要介紹了JS中移除非數(shù)字最多保留一位小數(shù)的實現(xiàn)代碼,文章給大家提到了js處理數(shù)字保留2位小數(shù),強(qiáng)制保留2位小數(shù)不夠補(bǔ)上.00的完整代碼,感興趣的朋友一起看看吧
    2018-05-05

最新評論