පොරොන්දු සහ නිරීක්ෂණ අතර වෙනස කුමක්ද?


1424

කෝණික Promiseසහ අතර වෙනස Observableකුමක්ද?

අවස්ථා දෙකම තේරුම් ගැනීමට එක් එක් උදාහරණය උපකාරී වේ. එක් එක් සිද්ධිය අපට භාවිතා කළ හැක්කේ කුමන අවස්ථාවෙහිදීද?


23
මෙම ලිපිය කියවීමට මම ඔබට යෝජනා කරමි; Angular2 පොරොන්දුව එදිරිව නිරීක්ෂණය කළ හැකිය
erolkaya84


3
මෙම ප්‍රශ්නාවලිය කියවන ඕනෑම කෙනෙකුට - නඩත්තු කරන්නෙකු, කථිකයෙකු සහ දීර් time කාලීන පරිශීලකයෙකු වන PoV වෙතින් ලෝක දෙකටම සම්බන්ධ වූ අයෙකු ලෙස, පොරොන්දු පිළිබඳ නිල RxJS ලියකියවිලි සහ MDN ප්‍රලේඛනය කියවීමට මම ඔබව දිරිමත් කරමි. මම පෞද්ගලිකව මෙහි පිළිතුරු මුළුමනින්ම නොමඟ යවන සහ වැරදි ලෙස සොයාගෙන ඇති අතර ඒවා විශ්වාස කරමි.
බෙන්ජමින් ග ru න්බෝම්

1
මෙම කෝණික නිල ලේඛනය angular.io/guide/comparing-observables
fgul

Answers:


1587

පොරොන්දුව

Promiseහැන්ඩ්ල් වූ තනි සිදුවීමක් විට අසමකාලීක මෙහෙයුම සූර්යයා හෝ අසමත් වෙයි.

සටහන: Promiseඅවලංගු කිරීමට සහාය වන පුස්තකාල එහි ඇත, නමුත් ES6 Promiseමෙතෙක් එසේ නොවේ.

නිරීක්ෂණය කළ හැකි

An (බොහෝ භාෂාවලින්) හා Observableසමාන වන අතර Streamඑක් එක් සිදුවීම සඳහා ඇමතුම් ලබා ගැනීම කැඳවනු ලබන සිදුවීම් ශුන්‍ය හෝ වැඩි ගණනක් සම්මත කිරීමට ඉඩ දෙයි.

බොහෝ විට Observableවඩා කැමති Promiseවන්නේ එය Promiseසහ තවත් බොහෝ දේ සපයන බැවිනි . සමග Observableඑය ඔබ 0, 1, හෝ බහු සිදුවීම් හසුරුවීමට කිරීමට අවශ්ය නම් කමක් නෑ. සෑම අවස්ථාවකම ඔබට එකම API භාවිතා කළ හැකිය.

ObservableඅවලංගුPromise කිරීමට වඩා වැඩි වාසියක් ඇත . සේවාදායක හෝ වෙනත් මිල අධික අසමකාලීක මෙහෙයුම සඳහා HTTP ඉල්ලීමක් ප්රතිඵලයක් තවදුරටත් අවශ්ය නොවේ නම්, ආයතනයකට ටික, ග්රාහකත්වය අවලංගු කිරීමට ඉඩ අවසානයේ ඔබ දැනුම්දීමේ අවශ්ය නැහැ විට පවා සාර්ථක අසාර්ථක callback කියනු ඇත හෝ එය තවදුරටත් සපයන ප්‍රති result ලය.SubscriptionObservablePromise

නිරීක්ෂණය සපයයි ක්රියාකරුවන් වැනි map, forEach, reduce, ... රැසක් සමාන

බොහෝ විට තරමක් පහසු වන retry(), හෝ replay(), ... වැනි බලවත් ක්‍රියාකරුවන් ද ඇත.


182
එබැවින් තනි ඇමතුම් ආපසු ගැනීමේදී නිරීක්‍ෂණය කළ හැකි දේ වෙනුවට පොරොන්දුව භාවිතා කිරීමට හොඳ හේතුවක් තිබේද? එසේත් නැතිනම් නිරීක්‍ෂක ද්‍රව්‍යද එලෙස භාවිතා කළ යුතුද? මූලික වශයෙන්, “සියල්ල නිරීක්ෂණය කළ හැකි” වීම හොඳ පුරුද්දක් ද? නැතහොත් පොරොන්දුවට තවමත් එහි ස්ථානයක් තිබේද?
ජොෂ් වර්ට්ස්

77
ඔබට ප්‍රතික්‍රියාශීලී විලාසය භාවිතා කිරීමට අවශ්‍ය නම්, සෑම තැනකම නිරීක්‍ෂක භාවිතා කරන්න. ඔබට නිරීක්‍ෂණය කළ හැකි නම් පමණක් පහසුවෙන් රචනා කළ හැකිය. ඔබ ඒවා මිශ්‍ර කළහොත් එය තවදුරටත් පිරිසිදු නොවේ. ඔබ ප්‍රතික්‍රියාශීලී ශෛලිය ගැන තැකීමක් නොකරන්නේ නම්, අවලංගු කළ හැකි සහ සිදුවීම් ප්‍රවාහයන් සඳහා නිරීක්ෂණය කළ හැකි තනි සිදුවීම් සඳහා පොරොන්දුවක් භාවිතා කළ හැකිය.
ගුන්ටර් සුච්බවර්

36
@ GernterZöchbauer හේ - නිරීක්ෂණ හෝ ක්‍රියාකාරී වැඩසටහන් වලට එරෙහිව මට කිසිදු තර්කයක් නොමැත. මම සරලවම කියා සිටින්නේ ප්‍රධාන වශයෙන් එන්ජී 2 හි http හරහා නිරීක්ෂණාගාර වෙත දිවෙන පුද්ගලයින්ට ඇමතුම් ලබා ගැනීම සඳහා පොරොන්දු හරහා නිරීක්ෂණ භාවිතා කිරීමට කිසිදු සැබෑ හේතුවක් නොමැති බවයි. පොරොන්දු භාවිතා කිරීමෙන් ඔවුන්ට ප්‍රායෝගික කිසිවක් අහිමි නොවේ. නිශ්ක්‍රීය කිරීම සහ නැවත උත්සාහ කිරීමේ ක්‍රියාකරුවන් අදාල නොවේ - ඔබට ng-debounce සමඟ බැහැර කළ හැකි අතර ඇමතුමක් අසාර්ථක වේ යැයි අපේක්ෂා කරන්නේ නම්, සාමාන්‍යයෙන්, කේතය සමඟ ගැටළුවක් පවතී. නැවත ඇමතුම් සමඟ වැඩ කිරීමට මට අවශ්‍ය වූ එකම අවස්ථාව වූයේ HVT සඳහා අස්ථායී තෙවන පාර්ශවීය API විමසීමයි.
VSO

97
ඒත් කරුණාකරලා අමතක කරන්න එපා ඒ Promiseසමග async/ awaitඔබගේ කේතය පැතලි නැවත වෙයි! බොහෝ අවස්ථාවන්හිදී සහ රොකට් විද්‍යාව සමඟ ගනුදෙනු නොකරන ව්‍යාපෘති වලදී, එම බිහිසුණු කැදැලි කාර්යයන් අනවශ්‍ය ලෙස සංකීර්ණ ක්‍රමවේදයන් සමඟ ලිවීමට අවශ්‍ය නොවේ. ඔබට භාවිතා කල හැකි async/ awaitමෙන් transpilers අද TypeScript, සහ ඕනෑම තොරව සැබෑ මානව කියවිය හැකි පැතලි කේතය ලියන්න rxjsගිනි උදුනක්. rxjsතෝරාගත් අවස්ථාවන්හිදී ඔබට සමහර විට තවමත් අවශ්‍ය වනු ඇත , මන්ද එයට සැබවින්ම ඉදිරිපත් කිරීමට බොහෝ දේ ඇත.
badkos

17
මේ පිළිතුර, නොමඟ යවන ලෙස නිරීක්ෂණය කළ නොහැකි ඇළ එය සමාන ය වැනි ඇළ ශ්රිතයක්ම .
බෙන්ජමින් ග ru න්බෝම්

342

දෙකම Promisesසහ අපගේ යෙදුම්වල අසමමුහුර්ත ස්වභාවය Observablesසමඟ කටයුතු කිරීමට අපට උපකාරී වන සාරාංශ ලබා දේ . ඔවුන් අතර වෙනස පැහැදිලිව පෙන්වා දුන්නේ @ ගුන්ටර් සහ el රේලු විසිනි.

කේත ස්නිපටයක් වචන දහසක් වටින බැවින් ඒවා පහසුවෙන් තේරුම් ගැනීමට පහත උදාහරණය හරහා යන්න.

පුදුමාකාර ලිපියට ක්‍රිස්ටෝෆ් බර්ග්ඩෝෆ්ට ස්තූතියි


HTTP සමඟ ගනුදෙනු කිරීම සඳහා පොරොන්දු වෙනුවට කෝණික Rx.js නිරීක්ෂණ භාවිතා කරයි.

ඔබ ටයිප් කරන විට ප්‍රති results ල ක්ෂණිකව පෙන්විය යුතු සෙවුම් ශ්‍රිතයක් ඔබ ගොඩනඟයි යැයි සිතමු . හුරුපුරුදු බව පෙනේ, නමුත් එම කර්තව්‍යය සමඟ එන අභියෝග රාශියක් ඇත.

  • පරිශීලකයා යතුරක් එබූ සෑම අවස්ථාවකම සේවාදායකයේ අවසාන ස්ථානයට පහර දීමට අපට අවශ්‍ය නැත, එය HTTPඉල්ලීම් කුණාටුවකින් ඔවුන්ව ගංවතුරට ලක් කළ යුතුය . මූලික වශයෙන්, අපට එය පහර දීමට අවශ්‍ය වන්නේ පරිශීලකයා සෑම යතුරු පැදියක් වෙනුවට ටයිප් කිරීම නැවැත්වූ පසු පමණි.
  • පසුකාලීන ඉල්ලීම් සඳහා එකම විමසුම් පරාමිතීන් සමඟ සෙවුම් අන්ත ලක්ෂ්‍යයට පහර නොදෙන්න .
  • යල්පැනගිය ප්‍රතිචාර සමඟ කටයුතු කරන්න. අපට එකවර ගුවන් ගමන් වලදී විවිධ ඉල්ලීම් ඇති විට, ඒවා අනපේක්ෂිත පිළිවෙලට නැවත පැමිණෙන අවස්ථා සඳහා අප ගණන් දිය යුතුය. අපි මුලින්ම පරිගණකය ටයිප් කරන්න , නවත්වන්න, ඉල්ලීමක් එළියට යයි, අපි කාර් ටයිප් කරන්නෙමු , නවත්වන්න, ඉල්ලීමක් පිටතට යයි සිතන්න. දැන් අපට ගුවන් ගමන් සඳහා ඉල්ලීම් දෙකක් තිබේ. අවාසනාවකට මෙන්, පරිගණකය සඳහා ප්‍රති results ල රැගෙන යන ඉල්ලීම මෝටර් රථ සඳහා ප්‍රති results ල රැගෙන යන ඉල්ලීමෙන් පසුව නැවත පැමිණේ .

නිරූපණය හුදෙක් ගොනු දෙකකින් සමන්විත වේ: app.tsසහ wikipedia-service.ts. සැබෑ ලෝක වාතාවරණයක දී, අපි බොහෝ දුරට දේවල් තව දුරටත් බෙදන්නෙමු.


පහත දැක්වෙන්නේ විස්තර කර ඇති කිසිදු අවස්ථාවකට මුහුණ නොදෙන පොරොන්දුව මත පදනම් වූ ක්‍රියාත්මක කිරීමයි.

wikipedia-service.ts

import { Injectable } from '@angular/core';
import { URLSearchParams, Jsonp } from '@angular/http';

@Injectable()
export class WikipediaService {
  constructor(private jsonp: Jsonp) {}

  search (term: string) {
    var search = new URLSearchParams()
    search.set('action', 'opensearch');
    search.set('search', term);
    search.set('format', 'json');
    return this.jsonp
                .get('http://en.wikipedia.org/w/api.php?callback=JSONP_CALLBACK', { search })
                .toPromise()
                .then((response) => response.json()[1]);
  }
}

ලබා දී ඇති සෙවුම් පදයක් සමඟ විකිපීඩියා API ට එරෙහිව ඉල්ලීමක් Jsonpකිරීමට අපි සේවාව එන්නත් කරමු . A සිට a දක්වා ලබා ගැනීම සඳහා අප අමතන බව සැලකිල්ලට ගන්න . අවසානයේදී අපගේ සෙවුම් ක්‍රමයේ නැවත පැමිණීමේ වර්ගය ලෙස අවසන් වේ.GETtoPromiseObservable<Response>Promise<Response>Promise<Array<string>>

app.ts

// check the plnkr for the full list of imports
import {...} from '...';

@Component({
  selector: 'my-app',
  template: `
    <div>
      <h2>Wikipedia Search</h2>
      <input #term type="text" (keyup)="search(term.value)">
      <ul>
        <li *ngFor="let item of items">{{item}}</li>
      </ul>
    </div>
  `
})
export class AppComponent {
  items: Array<string>;

  constructor(private wikipediaService: WikipediaService) {}

  search(term) {
    this.wikipediaService.search(term)
                         .then(items => this.items = items);
  }
}

මෙහි පුදුමයක් ද නැත. අපි අපගේ එන්නත් WikipediaServiceකර එහි ක්‍රියාකාරිත්වය සෙවුම් ක්‍රමයක් හරහා අච්චුවට නිරාවරණය කරමු . අච්චුව යතුරු සහ ඇමතුම් සමඟ බැඳී ඇත search(term.value).

විකිපීඩියා සේවයේ සෙවුම් ක්‍රමය නැවත පැමිණෙන බවට පොරොන්දුවේ ප්‍රති result ලය අපි ලිහා, එය සරල නූල් පෙළක් ලෙස අච්චුවට නිරාවරණය කර ඇති අතර එමඟින් අපට *ngForඑය හරහා ලූපයක් තබා අප වෙනුවෙන් ලැයිස්තුවක් ගොඩනගා ගත හැකිය.

ප්ලන්කර් මත පොරොන්දුව මත පදනම් වූ ක්‍රියාත්මක කිරීමේ උදාහරණය බලන්න


කොහෙද නිරීක්ෂ්ය බැබළෙනු

සෑම යතුරු පහරකින්ම අවසාන ලක්ෂ්‍යයට පහර නොදෙන ලෙස අපගේ කේතය වෙනස් කරමු, නමුත් පරිශීලකයා 400 එම්එස් සඳහා ටයිප් කිරීම නැවැත්වූ විට පමණක් ඉල්ලීමක් එවන්න.

එවැනි සුපිරි බලයන් එළිදැක්වීම සඳහා අප විසින් පළමුව Observable<string>පරිශීලකයා ටයිප් කරන සෙවුම් පදය ලබා ගත යුතුය. යතුරු සිද්ධියට අතින් බැඳීම වෙනුවට, අපට කෝණික formControlනියෝගයෙන් ප්‍රයෝජන ගත හැකිය . මෙම විධානය භාවිතා කිරීම සඳහා, අපි පළමුව ReactiveFormsModuleඅපගේ යෙදුම් මොඩියුලයට ආනයනය කළ යුතුය .

app.ts

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { JsonpModule } from '@angular/http';
import { ReactiveFormsModule } from '@angular/forms';

@NgModule({
  imports: [BrowserModule, JsonpModule, ReactiveFormsModule]
  declarations: [AppComponent],
  bootstrap: [AppComponent]
})
export class AppModule {}

ආනයනය කළ පසු, අපට අපගේ අච්චුව තුළ සිටම formControl භාවිතා කර එය "පදය" යන නමට සැකසිය හැකිය.

<input type="text" [formControl]="term"/>

අපගේ අංගයක්, අප ක උදාහරණයක් නිර්මාණය FormControlසිට @angular/formඅපේ අංගයක් මත නම කාලීන යටතේ ක්ෂේත්ර ලෙස එලිදරව් කෙරෙයි.

තිරය ​​පිටුපස, යෙදුම ස්වයංක්‍රීයව අපට දායක විය හැකි Observable<string>දේපලක් ලෙස නිරාවරණය කරයි valueChanges. දැන් අපි ඇති බව Observable<string>, පරිශීලක ආදාන ජය ඉල්ලා ලෙස පහසු පරිදි වේ debounceTime(400)අප මත Observable. Observable<string>මීටර 400 ක් සඳහා නව අගයන් නොපැමිණෙන විට පමණක් නව අගයක් විමෝචනය වන නව දෙයක් මෙය නැවත ලබා දෙනු ඇත.

export class App {
  items: Array<string>;
  term = new FormControl();
  constructor(private wikipediaService: WikipediaService) {
    this.term.valueChanges
              .debounceTime(400)        // wait for 400ms pause in events
              .distinctUntilChanged()   // ignore if next search term is same as previous
              .subscribe(term => this.wikipediaService.search(term).then(items => this.items = items));
  }
}

අපගේ යෙදුම දැනටමත් ප්‍රති results ල පෙන්වන සෙවුම් යෙදුමක් සඳහා තවත් ඉල්ලීමක් යැවීම සම්පත් නාස්තියකි. අපේක්ෂිත හැසිරීම සාක්ෂාත් කර ගැනීම සඳහා distinctUntilChangedඅප කළ යුත්තේ අප ඇමතූ වහාම ක්‍රියාකරු අමතන්නdebounceTime(400)

ආදර්ශය බලන්න නිරීක්ෂණය මත ක්රියාත්මක Plunker

යල්පැනගිය ප්‍රතිචාර සමඟ කටයුතු කිරීම සඳහා කරුණාකර සම්පූර්ණ ලිපිය http://blog.whattram.io/angular/2016/01/06/taking-advantage-of-observables-in-angular2.html පරීක්ෂා කරන්න.

මම කෝණික භාෂාවෙන් Http භාවිතා කරන තාක් දුරට, සාමාන්‍ය භාවිත අවස්ථා වලදී නිරීක්‍ෂණය කළ හැකි පොරොන්දුව භාවිතා කිරීමේදී විශාල වෙනසක් නොමැති බව මම එකඟ වෙමි. මෙහි කිසිදු වාසියක් ප්‍රායෝගිකව අදාළ නොවේ. අනාගතයේදී මට සමහර උසස් භාවිත අවස්ථා දැක ගත හැකි යැයි සිතමි :)


වැඩිදුර ඉගෙන ගන්න


32
Http සේවාව නිරීක්ෂණය කළ හැකි පදනමක් බවට පත් කිරීමේ තීරණය මම සම්පූර්ණයෙන්ම මිලදී ගන්නේ නැත. මට ඇසෙන සෑම පැහැදිලි කිරීමක්ම එකම උදාහරණය මත රඳා පවතී: යෙදුම අනුව සෙවීම. නමුත් එය බ්‍රව්සර් සිදුවීම් හැසිරවීමයි. අසමමුහුර්ත http ඉල්ලීම් සමඟ කටයුතු කිරීමේදී එය යෙදීමෙන් ලැබෙන වාසිය කුමක්දැයි ඇසීමට මා කැමතිය.
ඇලෙක්ස් පොලන්

1
මිශ්‍ර රටාවන් වළක්වා ගැනීමට ගත් තීරණය අහම්බයක්ද?
ඇලෙක්ස් පොලන්

6
Lex ඇලෙක්ස්පොලන්, ඇත්ත වශයෙන්ම http සේවාවේ ප්‍රතිලාභ සඳහා හොඳ පැහැදිලි කිරීමක් බෙන් ලෙෂ් සමඟ මෙම පෝඩ්කාස්ට් එකෙන් නිරීක්ෂණය කළ හැකිය: devchat.tv/js-jabber/… . අවසාන වශයෙන්, ප්‍රධාන වාසිය නම්, ඔබට නිරීක්‍ෂණය කළ හැකි අවලංගු කළ හැකි අතර, ඉහත සබැඳියේ විස්තර කර ඇති මේ සඳහා භාවිතා කිරීමේ සිද්ධියක් - මඳක් උපක්‍රමශීලී වුවත් - ඔබ බහු අප්පස් වලට කතා කර පළමු ප්‍රතිචාරය ගැන පමණක් සැලකිලිමත් වන්නේ නම්, ඔබ ඇමතූ apis එක මුලින්ම ඔබ වෙත පැමිණේ, එවිට ඔබට අනෙක් අයගේ ඉල්ලීම් අවලංගු කළ හැකිය.
nikolasleblanc

2
iknikolasleblanc, මට විශ්වාසයි ඔබට ඒ සඳහා $ q.race () භාවිතා කළ හැකිද?
jameslouiz

2
Lex ඇලෙක්ස්පොලන්, වාසිය නම් නිරීක්ෂණය කළ හැකි HTTP සේවාවක් මැද පියාසර HTTP ඉල්ලීම් අවලංගු කිරීම පහසු කිරීමයි. පසුකාලීන ඉල්ලීමක් කිරීමට පෙර නිරීක්ෂණය කළ හැකි HTTP වෙතින් හුදෙක් දායකත්වයෙන් ඉවත් කිරීමෙන් trungk18 හි පිළිතුරෙහි ධාවන තත්වය විසඳිය හැකිය. තවත් නිරීක්ෂණය කළ හැකි (උදා: අගය වෙනස්වීම්) මගින් අවුලුවන HTTP ඉල්ලීම් සඳහා RXJS ස්විච්මැප් භාවිතා කළ හැකිය. හුදකලා HTTP නිරීක්ෂණ සඳහා, ඔබට අතින් දායකත්වයෙන් ඉවත් වී නැවත දායක විය හැකිය.
ස්ටීටෙමැක්ගු

245

පොරොන්දු සහ නිරීක්ෂණ යන දෙකම ජාවාස්ක්‍රිප්ට් හි අසමමුහුර්ත ක්‍රියාකාරිත්වය සමඟ වැඩ කිරීමට අපට උපකාරී වේ. බොහෝ අවස්ථාවන්හිදී ඒවා බොහෝ සෙයින් සමාන ය, කෙසේ වෙතත්, මේ දෙක අතර තවමත් යම් වෙනස්කම් තිබේ, පොරොන්දු යනු http ඇමතුම් asynchronousවැනි ආකාරවලින් විසඳන අගයන් ය . අනෙක් අතට, නිරීක්‍ෂකයන් අසමමුහුර්ත සිදුවීම් මාලාවක් සමඟ කටයුතු කරයි . ඔවුන් අතර ඇති ප්‍රධාන වෙනස්කම් පහත දැක්වේ:

පොරොන්දුව:

  • එක් නල මාර්ගයක් තිබීම
  • සාමාන්‍යයෙන් භාවිතා කරන්නේ අසින්ක් දත්ත ප්‍රතිලාභ සමඟ පමණි
  • අවලංගු කිරීම පහසු නැත

නිරීක්ෂණය කළ හැකි:

  • අවලංගු කළ හැකිය
  • නැවත උත්සාහ කිරීම සහ නැවත උත්සාහ කිරීම වැනි ස්වභාවයෙන්ම නැවත අත්හදා බැලිය හැකිය
  • බහු නල මාර්ගවල දත්ත ප්‍රවාහය
  • සිතියම, පෙරණය වැනි අරාව වැනි මෙහෙයුම් තිබීම
  • සිදුවීම් වැනි වෙනත් ප්‍රභවයන්ගෙන් නිර්මාණය කළ හැකිය
  • ඒවා ශ්‍රිතයන් වන අතර ඒවා පසුව දායක විය හැකිය

දෘශ්‍යමය වශයෙන් වෙනස්කම් පෙන්වීම සඳහා මම පහත රූපමය රූපය නිර්මාණය කර ඇත්තෙමි:

පොරොන්දු සහ නිරීක්ෂණය කළ හැකි රූපය


4
"අවලංගු කිරීම පහසු නැත" යන පොරොන්දුව, ඒවා අවලංගු කළ හැකිද?
පර්දීප් ජේන්

11
ඔව්, ඒවා අවලංගු කිරීමට ක්‍රමයක් ද ඇත ... සමහර අය බ්ලූබර්ඩ් හෝ තෙවන පාර්ශවීය පුස්තකාල භාවිතා කරති ... කෝණික භාෂාවෙන් Q පුස්තකාලය භාවිතා කිරීම එය අවලංගු කිරීමට ක්‍රම තිබේ ... නමුත් මා කී පරිදි එය එතරම් පහසු නැත
Alireza

එක් නල මාර්ගයක් තිබීම සමහර විට වාසි ඇත, උදා. APP_INITIALIZER හි, ඔබට බහු නල මාර්ගයක් තිබේ නම් එය කිසි විටෙකත් සමහර විට අවසන් කිරීමට හෝ කිහිප වතාවක් අවසන් කිරීමට නොහැකිය.
windmaomao

6
අවලංගු කිරීම Promiseයනු පොරොන්දු වන ආකාරය ගැන සිතීම වැරදි ක්‍රමයකි. එහි Promiseවගකීම වන්නේ අසමසම අනුකූලතාවයකින් සාර්ථකත්වය හෝ අසාර්ථකත්වය හැසිරවීම පමණි .. ඔබට http ඉල්ලීමක් අවලංගු කිරීමට අවශ්‍ය නම් ඔබ ඉල්ලීම අවලංගු කරන්න, පොරොන්දුව නොව, අවලංගු කිරීමේ ප්‍රති result ලය පොරොන්දුව ඉටු කිරීම හෝ ප්‍රතික්ෂේප කිරීම. jsfiddle.net/greggman/ea0yhd4p
gman

2
ඇග්මන් හරියටම. පොරොන්දුව සරලවම අනාගත වටිනාකමක් නියෝජනය කරයි . එය කරන්නේ කෙසේද නොවන නියෝජනය වටිනාකම ජනිත කරන මෙහෙයුම . ඔබට අගයක් අවලංගු කළ නොහැක. ඔබට අගයක් නැවත උත්සාහ කළ නොහැක. එය වටිනාකමක් පමණි. එය හෝ නොවිය හැකි වර්තමාන තවමත්, එය විය හැක කවදාවත් ව්යතිරේකයක් සිදුවූ බැවින් පවතී, නමුත් ඒක තමයි.
යෝනා ඇප්ලෙට්‍රි

77

පොරොන්දු

  1. අර්ථ දැක්වීම: කාර්යයන් අසමමුහුර්තව ක්‍රියාත්මක කිරීමට සහ ඒවායේ ප්‍රතිලාභ අගයන් (හෝ ව්‍යතිරේක) භාවිතා කිරීමට ඔබට උදව් කරයි, නමුත් ක්‍රියාත්මක වූ විට එක් වරක් පමණි .
  2. කම්මැලි නොවේ
  3. අවලංගු කළ නොහැක (අවලංගු කිරීමට සහාය දෙන පොරොන්දු පුස්තකාල එහි ඇත, නමුත් ES6 පොරොන්දුව මෙතෙක් නොවේ). ගත හැකි තීරණ දෙක වේ
    • ප්‍රතික්ෂේප කරන්න
    • විසඳන්න
  4. නැවත උත්සාහ කළ නොහැක (පොරොන්දු වලට නැවත උත්සාහ කිරීමේ හැකියාව ඇති බවට පොරොන්දුව ලබා දුන් මුල් ශ්‍රිතයට ප්‍රවේශය තිබිය යුතුය, එය නරක පුරුද්දකි)

නිරීක්ෂණ

  1. අර්ථ දැක්වීම: කාර්යයන් අසමමුහුර්තව ක්‍රියාත්මක කිරීමට ඔබට උපකාරී වන අතර, ක්‍රියාත්මක වන විට ඒවායේ ප්‍රතිලාභ අගයන් අඛණ්ඩ අනුක්‍රමයකින් ( කිහිප වතාවක් ) භාවිතා කරයි.
  2. පෙරනිමියෙන්, එය කාලයත් සමඟ වටිනාකම් විමෝචනය කරන බැවින් එය කම්මැලි ය.
  3. කේතීකරණ උත්සාහය සරල කරන ක්‍රියාකරුවන් විශාල ප්‍රමාණයක් ඇත.
  4. අවශ්‍ය විටෙක නැවත උත්සාහ කිරීම සඳහා එක් ක්‍රියාකරු නැවත උත්සාහයක් භාවිතා කළ හැකිය, එසේම සමහර කොන්දේසි මත පදනම්ව නිරීක්‍ෂණය කළ හැකි නැවත උත්සාහ කිරීමට අපට අවශ්‍ය නම් නැවත උත්සාහ කරන්න .

    සටහන : ක්‍රියාකරුවන්ගේ ලැයිස්තුවක් සහ ඔවුන්ගේ අන්තර්ක්‍රියාකාරී රූප සටහන් RxMarbles.com වෙතින් ලබා ගත හැකිය


73

නිරීක්ෂණයේ එක් අවාසියක් පිළිතුරු වල නොමැත. පොරොන්දු මඟින් ES7 අසින්ක් / අපේක්ෂිත කාර්යයන් භාවිතා කිරීමට ඉඩ ලබා දේ. ඔවුන් සමඟ ඔබට සමමුහුර්ත කේතයක් ලිවිය හැකිය, එය සමමුහුර්ත ක්‍රියාකාරී ඇමතුමක් වනු ඇත, එබැවින් ඔබට තවදුරටත් ඇමතුම් අවශ්‍ය නොවේ. නිරීක්‍ෂකයන්ට මෙය කිරීමට ඇති එකම හැකියාව නම් ඒවා පොරොන්දු බවට පරිවර්තනය කිරීමයි. නමුත් ඔබ ඒවා පොරොන්දු බවට පරිවර්තනය කළ විට, ඔබට නැවත ලැබිය හැක්කේ එක් ප්‍රතිලාභ අගයක් පමණි:

async function getData(){
    const data = await observable.first().toPromise();
    //do stuff with 'data' (no callback function needed)
}

වැඩිදුර කියවීම: Rx නිරීක්‍ෂණය කළ හැකි දෙයක් සඳහා මා බලා සිටින්නේ කෙසේද?


23
පොරොන්දුවල ler ාතක වර්‍ගය කිසිවෙකු පෙන්වා නොදීමට හේතුවද පුදුමයට කරුණකි - සරල හා විනිවිදභාවය නිසා අසින්ක් / බලා සිටීම. පැතලි කේත ලිවීමේ හැකියාව සඳහා මම පොරොන්දු වෙත මාරු වීමි. සරල ව්‍යාපාරික තර්කනය සහ UI අන්තර්ක්‍රියා කේතය රොකට් විද්‍යාව මෙන් නොවිය යුතු අතර ප්‍රතික්‍රියාකාරී දිගු වල කැදැල්ලෙන් දූෂණය විය යුතුය. එසේම, async / wait යනු අනාගතයේදී පමණක් නොව, ඔබට දැන් ප්‍රවාහක භාවිතා කරමින් පොදු නිෂ්පාදන යෙදුම්වල භාවිතා කළ හැකිය. මම TypeScript 2.3 භාවිතා කරන අතර එය නියම භාෂාවක් මෙන් නියමයි.
badkos

හොඳයි, නමුත් ප්‍රතික්‍රියාශීලී ආකාරයකින් සිතීම සහ RxOperators සමඟ සියල්ලන්ම මෙය ler ාතක අංගයක් නොවිය හැකිය
ජෝර්ජ් ටෝවර්

40

පොරොන්දු සහ නිරීක්ෂණ යන දෙකම හසුරුවන්නේ අසමමුහුර්ත ඇමතුම පමණි.

ඔවුන් අතර ඇති වෙනස්කම් මෙන්න:

නිරීක්ෂණය කළ හැකි

  1. යම් කාලයක් තුළ බහු අගයන් විමෝචනය කරයි
  2. අපි නිරීක්‍ෂණයට දායක වන තුරු කැඳවනු නොලැබේ
  3. දායක නොවීම () ක්‍රමය භාවිතා කිරීමෙන් අවලංගු කළ හැකිය
  4. ක්‍රියාකරුවන් සඳහා සෑම, පෙරනයක්, අඩු කිරීම, නැවත උත්සාහ කිරීම සහ නැවත උත්සාහ කිරීම සඳහා සිතියම සපයයි

පොරොන්දුව

  1. වරකට එක් අගයක් පමණක් විමෝචනය කරයි

  2. .Then සහ .catch නොමැතිව සේවාවන් අමතයි

  3. අවලංගු කළ නොහැක

  4. කිසිදු ක්‍රියාකරුවෙකු සපයන්නේ නැත


2
පොරොන්දුවෙන් ඔබ හරියටම අදහස් කරන්නේ එකම වටිනාකමක් පමණක් වන අතර නිරීක්ෂණය කළ හැකි බහුවිධ
ආබෙල්

2
පොරොන්දුවක් කිසිසේත්ම වටිනාකමක් විමෝචනය නොකරයි - පොරොන්දුවක් යනු කාලයත් සමඟ වටිනාකමක්. බහුවිධ ග්‍රාහකයින්ට වටිනාකමක් ඇති පොරොන්දුවක් බහුකැස්ට් - ඔබ පොරොන්දුව ඉටු කළ පසු ඔබට දැනටමත් වටිනාකමක් තිබේ. නිරීක්ෂණය කළ හැකි ශ්‍රිතයක් වැනි ය , එයට දායක වීමෙන් ක්‍රියාව ඉල්ලා සිටී.
බෙන්ජමින් ග ru න්බෝම්

1
En බෙන්ජමින් ග ru න්බාම් තවමත් මට බහු ග්‍රාහකයින්ගේ සාමාන්‍යය ලැබුණේ නැත, කරුණාකර ඔබට සබැඳියක් හෝ උදාහරණයක් ලබා දිය හැකිය. ස්තූතියි
දීපක් පටිදාර්

2
obsable1.subscribe (subscriber1), obsable1.subscribe (subscriber2) - මෙය ශ්‍රිතය කිහිප වතාවක්ම ක්‍රියාත්මක කරයි .
බෙන්ජමින් ග ru න්බෝම්

2
කරුණාකර ඔබගේ සටහන සංස්කරණය කර තිර පිටපත් වෙනුවට සත්‍ය පෙළ පෙන්වන්න. අනෙක් අයට ඔබගේ පින්තූර පිටපත් කර ඇලවිය නොහැක, තවද බොහෝ ව්‍යාකරණ දෝෂ නිවැරදි කිරීමට ඔබට උදව් කළ නොහැක. විස්තර සඳහා මෙහි බලන්න. ඔබට ස්තුතියි.
පැං

29

මෙම පිළිතුර ප්‍රමාද වුවද, මම පහත වෙනස්කම් සාරාංශ කොට ඇත,

නිරීක්ෂණය කළ හැකි:

  1. නිරීක්ෂණය පමණක් ඇත functionගත වන බව an observera හා නැවත පැමිණීම function Observer: an object with next, error.
  2. ඔබ්සර්වර් කිරීමට ඉඩ subscribe/unsubscribeඑහි දත්ත ඇල, නිරීක්ෂකයා, ලබන වටිනාකම විමෝචනය, notifyගැන, නිරීක්ෂකයා errorsසහ ගැන නිරීක්ෂකයාගේ දැනුම්stream completion
  3. ඔබ්සර්වර් විසින් function to handle next valueධාරාවේ, දෝෂ සහ අවසානය සපයයි (ui සිදුවීම්, http ප්‍රතිචාර, වෙබ් සොකට් සහිත දත්ත).
  4. multiple valuesකාලයත් සමඟ වැඩ කරයි
  5. එය cancel-able/retry-ableවැනි ක්‍රියාකරුවන්ට සහය දක්වයි map,filter,reduce.
  6. නිරීක්‍ෂණය කළ හැකි දෙයක් නිර්මාණය කළ හැකිය - Observable.create()- ප්‍රතිලාභ නිරීක්‍ෂණය කළ හැකි ක්‍රමවේදයන් ක්‍රියාත්මක කළ හැකිය - Observer Observable.from()- අරාව පරිවර්තනය කළ හැකි හෝ නැවත කළ හැකි - Observable Observable.fromEvent()- සිදුවීමක් නිරීක්‍ෂණය කළ හැකි Observable.fromPromise()බවට පරිවර්තනය කරයි - පොරොන්දුවක් නිරීක්‍ෂණය කළ හැකි බවට පරිවර්තනය කරයි - Observable.range()- විශේෂිත පරාසයේ පූර්ණ සංඛ්‍යා අනුක්‍රමයක් ලබා දෙයි

පොරොන්දුව :

  1. පොරොන්දුවක් නියෝජනය කරන්නේ අනාගතයේදී අවසන් වන කාර්යයකි;

  2. පොරොන්දු බවට පත්වේ resolved by a value;

  3. ව්‍යතිරේක මගින් පොරොන්දු ප්‍රතික්ෂේප වේ;

  4. නැත cancellable, එය නැවත පැමිණේa single value

  5. පොරොන්දුවක් මඟින් ශ්‍රිතයක් හෙළි කරයි (then)

    -එවිට අලුත් දෙයක් ලබා දෙයි promise;

    ඒ සඳහා attachmentවන අවසර මත පදනම්ව ක්‍රියාත්මක වේ state;

    - handlersguaranteedතුළ ක්රියාත්මක කිරීමට order attached;


24

අනෙක් සියලුම පිළිතුරු ඔබගේ සැකයන් දුරු කළ යුතු යැයි මම විශ්වාස කරමි. එසේ වුවද, නිරීක්‍ෂණයන් ක්‍රියාකාරී ක්‍රමලේඛනය මත පදනම් වී ඇති බව එක් කිරීමට මට අවශ්‍ය වූ අතර, සිතියම, පැතලි සිතියම, අඩු කිරීම, සිප් වැනි කාර්යයන් සමඟ එය ඉතා ප්‍රයෝජනවත් වේ. විශේෂයෙන් API ඉල්ලීම් මත රඳා පවතින විට වෙබය ලබා ගන්නා අනුකූලතාව ම්ලේච්ඡ වැඩිදියුණු කිරීමකි.

මෙම ලේඛනය ප්‍රතික්‍රියාකාරක X හි නිල ලියකියවිලි බැවින් මම එය තරයේ නිර්දේශ කරමි .

ඔබට නිරීක්‍ෂණය කළ හැකි නම්, කොටස් 3 කින් යුත් මෙම ලිපිය යෝජනා කරමි: http://blog.danlew.net/2014/09/15/grokking-rxjava-part-1/

එය RxJava සඳහා අදහස් කළද, සංකල්ප එක හා සමාන වන අතර එය සැබවින්ම හොඳින් පැහැදිලි කර ඇත. ප්‍රතික්‍රියාශීලී එක්ස් ප්‍රලේඛනයේදී, ඔබට එක් එක් ශ්‍රිතය සඳහා සමානකම් ඇත. ඔබ RxJS සොයා බැලිය යුතුය.


23

පොරොන්දු හොඳම විසඳුම වූ ගැටලුවක් සමඟ මම දැන් කටයුතු කර ඇති අතර, මෙම ප්‍රශ්නය ප්‍රයෝජනවත් වන අවස්ථාවකදී පැකිලෙන ඕනෑම කෙනෙකුට මම එය මෙහි බෙදා දෙමි (මෙය මා කලින් සොයන පිළිතුරමයි):

Angular2 ව්‍යාපෘතියක මා සතුව පරාමිති කිහිපයක් ගෙන පෝරමයක් මත ඩ්‍රොප් ඩවුන් මෙනු ජනගහනය කිරීම සඳහා වටිනාකම් ලැයිස්තුවක් ලබා දේ. පෝරම සංරචකය ආරම්භ කරන විට, විවිධ ඩ්‍රොප් ඩවුන් මෙනු ගණනාවක් නිර්වචනය කිරීම සඳහා මට එකම පරාමිතිය විවිධ පරාමිතීන් සමඟ ඇමතිය යුතුය, කෙසේ වෙතත් මම සේවාව ඇමතීම සඳහා සියලු විචල්‍යයන් පෝලිම් කළහොත්, අවසාන එක පමණක් සාර්ථක වන අතර ඉතිරි දෝෂය පිටතට. දත්ත සමුදායෙන් ලබා ගන්නා සේවාවට කළ හැක්කේ වරකට එක් ඉල්ලීමක් පමණි.

සියලුම ඩ්‍රොප් ඩවුන් මෙනු විචල්‍යයන් සාර්ථකව ජනගහනය කිරීමට ඇති එකම ක්‍රමය නම්, අවසාන ඉල්ලීම අවසන් වන තෙක් නව ඉල්ලීමක් ක්‍රියාවට නැංවීම වළක්වන අයුරින් සේවාව ඇමතීමයි. පොරොන්දුව / .එහි යාන්ත්‍රණය මඟින් ගැටලුව මනාව විසඳීය.

  fetchValueList(listCode): Promise<any> {
      return this.dataSvc.getValueList(listCode, this.stateSvc.currentContext, this.stateSvc.currentLanguageCode)
          .map(response => response.json())
          .toPromise();
  }

  initializeDropDowns() {
      this.fetchValueList('First-Val-List')
          .then(data => {
              this.firstValList = data;
              return this.fetchValueList('Second-Val-List')
          }).then(data => {
              this.secondValList = data;
              return this.fetchValueList('Third-Val-List')
          }).then(data => {
              this.thirdValList = data;
          })  }

මම සංරචකයේ ඇති කාර්යයන් නිර්වචනය කර ngOnInit හි initializeDropDowns () ලෙස හැඳින්වුවෙමි.

FetchValueList ශ්‍රිතය පොරොන්දුවක් ලබා දෙයි, එබැවින් පළමු ඇමතුම පළමු ලැයිස්තු කේතය පසු කරන අතර පොරොන්දුව නිරාකරණය වූ විට, ප්‍රතිලාභ අගය .එහි බ්ලොක් එකේ දත්ත විචල්‍යය තුළ ඇත. ශ්‍රිතය දත්ත ආපසු ලබා දී ඇති බැවින්, සේවාව අවසන් වී ඇති බව අපි දනිමු. දෙවන ලැයිස්තු කේතය සමඟ නැවත ඇමතීම ආරක්ෂිතයි, ප්‍රතිලාභ අගය ඊළඟ විචල්යයේ දත්ත විචල්‍යය තුළ ඇත .එම අවහිරය සහ අපි එය මෙම තත්පරයට ලබා දෙන්නෙමු.

සියලුම විචල්‍යයන් ජනගහනය කිරීම සඳහා අපට අවශ්‍ය වාර ගණනක් දම්වැල් කළ හැකි අතර, අවසාන කේත වාරණයේදී අපි ආපසු ප්‍රකාශය අතහැර දමා වාරණය අවසන් වේ.

මෙය ඉතා නිශ්චිත භාවිත අවස්ථාවකි, එහිදී අපට තනි සේවාවක් ඇති අතර එය සංරචකය ආරම්භ වන විට කිහිප වතාවක් කැඳවිය යුතු අතර, සේවාව ලබා ගැනීම සම්පූර්ණ කර එය නැවත කැඳවීමට පෙර වටිනාකමක් ලබා දිය යුතුය, නමුත් මේ අවස්ථාවේ දී, පොරොන්දුව / .එවිට ක්‍රමය වඩාත් සුදුසු විය.


3
(ඉහළ පෙළේ) නිරීක්ෂණය කළ හැකි දෑ සමඟද මෙය නිසැකවම කළ හැකිය. ඔබට scan()අනුක්‍රමික නිරීක්ෂණ ප්‍රවාහයක් තැනීමට නිදසුනක් ලෙස භාවිතා කළ හැකිය. කෙසේ වෙතත්, ඔබේ ප්‍රවේශය වඩාත් පැහැදිලි සහ තේරුම් ගැනීමට පහසු විය හැකිය.
lex82

1
ඔබට "පසුව" "ස්විච්මැප්" සමඟ ප්‍රතිස්ථාපනය කර නිරීක්ෂණය කළ හැකි දේම කළ හැකිය.
ආචාර්ය සී. හිලාරියස්

1
ස්විච්මැප් හි ඇති ගැටළුව නම්, මම තේරුම් ගත් පරිදි, එය සියලු ඉල්ලීම් සමාන්තරව ආරම්භ කර ඒවා සියල්ල නැවත පැමිණෙන තෙක් බලා සිටීම, පසුව ඇමතුම් ශ්‍රිතයට අගයන් නැවත ලබා දීම මගේ තත්වය තුළ මට කළ නොහැකි තනි සේවාදායකයක් ඇත සමාන්තරව කිහිප වතාවක් අමතන්න (නව ඒවා පැමිණෙන විට සේවාදායකයා විසින් නිම නොකළ ඉල්ලීම් අතහැර දමනු ඇත), එබැවින් නව ඇමතුමක් ආරම්භ කිරීමට පෙර දත්ත සමුදා සේවාවට එක් එක් ඇමතුම සම්පුර්ණ කර ඇති බවට මට සහතික විය යුතු අතර පොරොන්දුව / පසුව හොඳම සහ සමහර විට එය විසඳීමට ඇති එකම මාර්ගයයි.
ස්ටීවන් ආර්. ස්මිත්

1
ඔබ දම්වැල් ඒකාබද්ධ කිරීමේ සිතියම භාවිතා නොකළේ ඇයි? මම ඔබේ කේතය තේරුම් ගත් තාක් දුරට, මෙය ඉතා සරල වන අතර ඔබේ ආදර්ශය තරම්ම කාර්යය ඉටු කරයි. @ StephenR.Smith
f පික්

1
ReOre ඔබට වෙනත් ගැටලුවක් ලෙස එකම ගැටලුව විසඳීම සඳහා කේත උදාහරණයක් එක් කළ හැකිද? හොඳ යොමු කිරීමක් වනු ඇති අතර අනාගතයේ දී හොඳ ප්‍රතිනිර්මාණය කිරීමේ අවස්ථාවක් විය හැකිය. අවශ්‍යතාවය නම්, ඕනෑම කේතයකට බැකෙන්ඩ් සේවාවට සමාන්තරව ඇමතිය නොහැකි නම්, එය ඇමතිය යුතුය, ප්‍රතිලාභ අගය එනතෙක් බලා නැවත ඇමතිය යුතුය.
ස්ටීවන් ආර්. ස්මිත්

21

පොරොන්දුව:

  • අනාගත වටිනාකමක් ලබා දෙන්න;
  • කම්මැලි නොවේ;
  • අවලංගු කළ නොහැක;

නිරීක්ෂණය කළ හැකි:

  • කාලයත් සමඟ බහු අගයන් විමෝචනය කරයි;
  • කම්මැලි;
  • අවලංගු කළ හැකි;
  • සිතියම, පෙරණය, අඩු කිරීම සහ සමාන ක්‍රියාකරුවන්ට සහය දක්වයි

ඔබට අවශ්‍ය නම් කෝණික භාෂාවෙන් HTTP අමතන විට නිරීක්‍ෂණය වෙනුවට පොරොන්දු භාවිතා කළ හැකිය.


20

දළ විශ්ලේෂණය:

  • පොරොන්දු සහ නිරීක්ෂණ යන දෙකම අසමමුහුර්ත මෙහෙයුම් සමඟ කටයුතු කිරීමට අපට උපකාරී වේ. මෙම අසමමුහුර්ත මෙහෙයුම් සිදු කරන විට ඔවුන්ට ඇතැම් ඇමතුම් ලබා ගත හැකිය.
  • පොරොන්දුවකට හැසිරවිය හැක්කේ එක් සිදුවීමක් පමණි, නිරීක්‍ෂණය යනු කාලයත් සමඟ සිදුවීම් ප්‍රවාහයන් සඳහා ය
  • පොරොන්දු විභාග වූ පසු අවලංගු කළ නොහැක
  • දත්ත නිරීක්‍ෂක විමෝචනය ක්‍රියාකරුවන් භාවිතයෙන් පරිවර්තනය කළ හැකිය

අසමමුහුර්ත හැසිරීම් සමඟ කටයුතු කිරීම සඳහා ඔබට සැමවිටම නිරීක්ෂණය කළ හැකි දෙයක් භාවිතා කළ හැකිය. කෙසේ වෙතත්, සමහර විට නිරීක්ෂණය කළ හැකි මෙම අතිරේක ක්‍රියාකාරිත්වය අවශ්‍ය නොවේ. එවිට ඒවා භාවිතා කිරීම සඳහා පුස්තකාලයක් ආනයනය කිරීම අමතර කාර්යයක් වනු ඇත.

පොරොන්දු භාවිතා කළ යුත්තේ කවදාද:

ඔබට ප්‍රති as ල සැකසීමට අවශ්‍ය තනි අසමමුහුර්ත මෙහෙයුමක් ඇති විට පොරොන්දු භාවිතා කරන්න . උදාහරණයක් වශයෙන්:

var promise = new Promise((resolve, reject) => {
  // do something once, possibly async
  // code inside the Promise constructor callback is getting executed synchronously

  if (/* everything turned out fine */) {
    resolve("Stuff worked!");
  }
  else {
    reject(Error("It broke"));
  }
});

//after the promise is resolved or rejected we can call .then or .catch method on it

promise.then((val) => console.log(val))      // logs the resolve argument
       .catch((val) => console.log(val));    // logs the reject argument

එබැවින් පොරොන්දුවක් මඟින් යම් කේතයක් නිරාකරණය කරන හෝ ප්‍රතික්ෂේප කරන තැනක් ක්‍රියාත්මක කරයි. විසඳීම හෝ ප්‍රතික්ෂේප කිරීම යනුවෙන් හැඳින්වුවහොත් පොරොන්දුව අපේක්ෂිත තත්වයේ සිට විසඳන ලද හෝ ප්‍රතික්ෂේප කරන ලද තත්වයකට යයි. පොරොන්දු තත්ත්වය නිරාකරණය කළ විට then()ක්‍රමය හැඳින්වේ. පොරොන්දු රාජ්යය ප්රතික්ෂේප කළ විට, catch()ක්රමය හැඳින්වේ.

නිරීක්ෂණ භාවිතා කළ යුත්තේ කවදාද:

කාලයත් සමඟ ඔබ හැසිරවිය යුතු ප්‍රවාහයක් (දත්ත) ඇති විට නිරීක්ෂණ භාවිතා කරන්න . ප්‍රවාහයක් යනු කාලයත් සමඟ ලබා ගත හැකි දත්ත මූලද්‍රව්‍යයන්ගේ අනුක්‍රමයකි . ධාරාවන් සඳහා උදාහරණ:

  1. පරිශීලක සිදුවීම්, උදා ක්ලික් කිරීම හෝ යතුරු සිදුවීම්. පරිශීලකයා කාලයත් සමඟ සිදුවීම් (දත්ත) ජනනය කරයි.
  2. වෙබ්සොකට්, සේවාදායකයා සේවාදායකයට වෙබ්සොකට් සම්බන්ධතාවයක් ලබා දීමෙන් පසු එය කාලයත් සමඟ දත්ත තල්ලු කරයි.

ම නිරීක්ෂණය දී විට නිරූපනය කොට ඇති නම් ඊළග යන විට සිදු වූ දෝශයක් , හෝ නිරීක්ෂණය කරන විට අවසන් . එවිට අපට මෙම නිරීක්‍ෂණයට දායක විය හැකි අතර එය සක්‍රිය කරන අතර මෙම දායකත්වයේ දී අපට ඇමතුම් 3 කින් සමත් විය හැකිය (සෑම විටම සියල්ල සමත් විය යුතු නැත). සාර්ථකත්වය සඳහා ක්‍රියාත්මක කළ යුතු එක් ඇමතුමක්, දෝෂයක් සඳහා එක් ඇමතුමක් සහ සම්පූර්ණ කිරීම සඳහා එක් ඇමතුමක්. උදාහරණයක් වශයෙන්:

const observable = Rx.Observable.create(observer => {
  // create a single value and complete
  observer.onNext(1);
  observer.onCompleted();
});

source.subscribe(
  x => console.log('onNext: %s', x),   //  success callback
  e => console.log('onError: %s', e),  //  error callback
  () => console.log('onCompleted')     //  completion callback
 );

// first we log: onNext: 1
//  then we log: onCompleted

නිරීක්‍ෂණය කළ හැකි දෙයක් නිර්මාණය කිරීමේදී නිරීක්‍ෂකයෙකුට තර්කයක් ලෙස සපයන ඇමතුම් ආපසු ගැනීමේ ශ්‍රිතයක් අවශ්‍ය වේ. මෙම නිරීක්ෂකයකු, ඔබ පසුව ඇමතිය හැකි onNext, onCompleted, onError. නිරීක්‍ෂණයට දායක වූ විට ඊට අනුරූප ඇමතුම් ආපසු දායකත්වයට ලැබෙනු ඇත.


12

පොරොන්දුව - අනාගත වටිනාකමක් ලබා දෙන්න. කම්මැලි නොවේ. අවලංගු කළ නොහැක. එය ප්‍රතික්ෂේප කිරීම හෝ විසඳීම සිදු කරනු ඇත.

නිරීක්ෂණය කළ හැකි - අනාගත වටිනාකමක් ලබා දෙන්න. කම්මැලි. අවලංගු කළ හැකිය. එය වෙනත් ක්‍රම සජීවී සිතියම, පෙරණය, අඩු කිරීම සපයයි.


10

පළමුව නිරීක්‍ෂණය කළ හැකි සමානතාවයට පොරොන්දු වන්න

  1. දෙකම අසින්ක් කේතය හැසිරවීමට භාවිතා කරයි.
  2. කරුණාකර පොරොන්දු උදාහරණය බලන්න. පොරොන්දු සාදන්නා විසින් කිසියම් අසමමුහුර්ත කර්තව්‍යයක් සම්පූර්ණ කිරීමෙන් පසු යම් අගයක් සහිතව ඇමතුමක් ලබා ගන්නා විට එය යොමු කිරීමේ ශ්‍රිතයක් සම්මත කරයි.

const promise = new Promise(resolve => {
  setTimeout(() => {
    resolve("Hello from a Promise!");
  }, 2000);
});

promise.then(value => console.log(value));

  1. දැන් නිරීක්ෂණය කළ හැකි උදාහරණය. මෙහිදී ද අපි නිරීක්‍ෂණය කළ හැකි ශ්‍රිතයක්, අසින්ක් කාර්යය හැසිරවීමට නිරීක්ෂකයෙකුට යමු. පොරොන්දුවේ විසඳුම මෙන් නොව එයට පහත ක්‍රමවේදය ඇති අතර ඒ වෙනුවට දායකත්වය ලබා ගනී.

  2. එබැවින් දෙකම අසින්ක් කාර්යයන් හසුරුවයි. දැන් අපි වෙනස බලමු.


const observable = new Observable(observer => {
  setTimeout(() => {
    observer.next('Hello from a Observable!');
  }, 2000);
});

observable.subscribe(value => console.log(value));

නිරීක්ෂණය කළ හැකි වෙනස එදිරිව පොරොන්දු වන්න

පොරොන්දුව

  1. එය තනි අගයක් නිරාකරණය කිරීම හෝ ප්‍රතික්ෂේප කිරීම සහ වරකට තනි අගය අසමමුහුර්ත කාර්යයක් හැසිරවිය හැකිය.
  2. පොරොන්දුවක් එය සම්පුර්ණ කළ අසමසම අගය විසඳූ පසු තවදුරටත් භාවිතා කළ නොහැක. එය එක් වරක් පමණක් භාවිතා කළ හැකි අතර මෙහි එය කෙටි වේ.
  3. අවලංගු කළ නොහැක
  4. ක්රියාකරුවන් සඳහා rxjs සහාය නොමැත.

නිරීක්ෂණය කළ හැකි

  1. බහු අසමමුහුර්ත අගයන් විමෝචනය කිරීමේ හැකියාව.
  2. සිදුවීම් හෝ සාරධර්ම ප්‍රවාහය හැසිරවීමට භාවිතා කරයි. ඔබට බොහෝ කාර්යයන් හෝ අගයන් රාශියක් ඇති බව සලකන්න, මේ සඳහා සෑම අවස්ථාවකම අගය ඇතුළත් කළ විට එය ස්වයංක්‍රීයව හැසිරවිය යුතුය. ඔබ මෙම අරාව තුළට අගයක් තල්ලු කරන ඕනෑම වේලාවක, එහි සියලුම ග්‍රාහකයින්ට නවතම අගය ස්වයංක්‍රීයව ලැබෙනු ඇත.
  3. ආදාන වෙනස්වීම්, නැවත නැවත පරතරය, සියලුම ළමා සංරචක සඳහා විකාශන අගයන්, වෙබ් සොකට් තල්ලු දැනුම්දීම් ආදිය නිරීක්ෂණය කිරීමට නිරීක්ෂණ ප්‍රයෝජනවත් වේ.
  4. ඕනෑම වේලාවක දායකත්වයෙන් ඉවත් වීමේ ක්‍රමය භාවිතයෙන් අවලංගු කළ හැකිය.
  5. පොරොන්දු වී ඇති තවත් අවසාන හොඳ කොටසක් වන්නේ rxjs ක්‍රියාකරුවන්ට සහාය වීමයි. දායක වීමට පෙර නිරීක්ෂණය කළ හැකි දත්ත පරිවර්තනය කිරීම සඳහා ඔබට බොහෝ නල ක්‍රියාකරුවන් ප්‍රධාන වශයෙන් සිතියම්, පෙරහන්, ස්විච්මැප්, සංයුක්ත ලේටෙස් යනාදිය ඇත.

රූප විස්තරය මෙහි ඇතුළත් කරන්න



8

අසමමුහුර්ත ක්‍රියාකාරකමක් අවසන් වූ විට හෝ අසමත් වූ විට පොරොන්දුවක් මඟින් තනි සිදුවීමක් විමෝචනය වේ.

නිරීක්‍ෂණය කළ හැකි ධාරාවක් (බොහෝ භාෂාවලින්) සමාන වන අතර සෑම සිදුවීමක් සඳහාම ඇමතුම් ලබා ගැනීම අවශ්‍ය වන අවම වශයෙන් ශුන්‍ය හෝ වැඩි ගණනක් වත් සම්මත කිරීමට අවසර දෙයි.

පොරොන්දුවට වඩා බොහෝ විට නිරීක්ෂණය කළ හැකි වන්නේ එය පොරොන්දුවේ උද්දීපනයන් සහ තවත් දේ ලබා දෙන බැවිනි. නිරීක්ෂණය කළ හැකි දේ සමඟ ඔබට 0, 1 හෝ විවිධ සිදුවීම් හැසිරවීමට අවශ්‍ය නම් එය වැදගත් නොවේ. එක් එක් සිද්ධිය සඳහා ඔබට සමාන API භාවිතා කළ හැකිය.

පොරොන්දුව: පොරොන්දුව තනි අගයක් විමෝචනය කරයි

උදාහරණයක් වශයෙන්:

const numberPromise = new Promise((resolve) => {
    resolve(5);
    resolve(10);
});

numberPromise.then(value => console.log(value));
// still prints only 5

නිරීක්ෂණය කළ හැකි: යම් කාලයක් තුළ බහු අගයන් විමෝචනය කරයි

උදාහරණයක් වශයෙන්:

  const numberObservable = new Observable((observer) => {
        observer.next(5);
        observer.next(10);
    });

numberObservable.subscribe(value => console.log(value));
// prints 5 and 10

යම් කාල සීමාවක් තුළ බහුවිධ අගයන් විමෝචනය කරන ප්‍රවාහයක් වැනි නිරීක්‍ෂණය කළ හැකි යැයි අපට සිතිය හැකි අතර විමෝචනය වන සෑම අයිතමයක් සඳහාම එකම ඇමතුම් ලබා ගැනීමේ ශ්‍රිතය කැඳවනු ලැබේ. එම දත්ත යම් කාලයක් පුරා තනි අගයක් හෝ බහු අගයක් ලෙස සම්ප්‍රේෂණය වේ ද යන්න.

පොරොන්දුව:

  • පොරොන්දුවක් කම්මැලි නොවේ
  • පොරොන්දුවක් අවලංගු කළ නොහැක

නිරීක්ෂණය කළ හැකි:

  • නිරීක්ෂණය කළ හැක්කේ කම්මැලි ය. "නිරීක්ෂණය කළ හැකි" මන්දගාමී වේ. අප එයට දායක වන තුරු එය කැඳවනු නොලැබේ.
  • දායක නොවීම () ක්‍රමය භාවිතා කිරීමෙන් නිරීක්‍ෂණය අවලංගු කළ හැකිය
  • නිරීක්‍ෂණය කළ හැකි එකතු කිරීමක් සිතියම, පුරෝකථනය, පෙරණය, අඩු කිරීම, නැවත උත්සාහ කිරීම, නැවත උත්සාහ කිරීම වැනි ප්‍රබල ක්‍රියාකරුවන් සපයයි.

නිරීක්ෂණවලට එදිරිව කෝණික පොරොන්දු


7

පොරොන්දු සහ නිරීක්ෂණ යන දෙකම අසමමුහුර්ත මෙහෙයුම් සමඟ කටයුතු කිරීමට අපට උපකාරී වේ. මෙම අසමමුහුර්ත මෙහෙයුම් සිදු කරන විට ඔවුන්ට ඇතැම් ඇමතුම් ලබා ගත හැකිය.

HTTP සමඟ ගනුදෙනු කිරීම සඳහා වන පොරොන්දු වෙනුවට කෝණික RxJS වෙතින් වන නිරීක්ෂණ භාවිතා කරයි

Below are some important differences in promises & Observables.

පොරොන්දු සහ නිරීක්ෂණ අතර වෙනස


1
කරුණාකර ඔබගේ සටහන සංස්කරණය කර තිර පිටපත් වෙනුවට සත්‍ය අන්තර්ගතය පෙළ ලෙස පෙන්වන්න. අනෙක් අයට ඔබගේ පින්තූර පිටපත් කර ඇලවිය නොහැක. විස්තර සඳහා මෙහි බලන්න. ඔබට ස්තුතියි.
පැං

7

පොරොන්දුව තනි අගයක් විමෝචනය කරන අතර නිරීක්ෂණය කළ හැකි බහු අගයන් විමෝචනය කරයි. එබැවින්, HTTP ඉල්ලීමක් හසුරුවන අතරතුර, පොරොන්දුවට එකම ඉල්ලීම සඳහා තනි ප්‍රතිචාරයක් කළමනාකරණය කළ හැකිය, නමුත් එකම ඉල්ලීමට බහුවිධ ප්‍රතිචාර තිබේ නම්, අප විසින් නිරීක්ෂණය කළ හැකි දේ භාවිතා කළ යුතුය. ඔව්, නිරීක්‍ෂණයට එකම ඉල්ලීම සඳහා බහුවිධ ප්‍රතිචාර දැක්විය හැකිය.

පොරොන්දුව

const promise = new Promise((data) =>
{ data(1);
  data(2);
  data(3); })
.then(element => console.log(‘Promise ‘ + element));

ප්‍රතිදානය

Promise 1

නිරීක්ෂණය කළ හැකි

const observable = new Observable((data) => {
data.next(1);
data.next(2);
data.next(3);
}).subscribe(element => console.log('Observable ' + element));

ප්‍රතිදානය

Observable 1
Observable 2
Observable 3

4

කෙටි පිළිතුර :

නිරීක්ෂණය වේ වඩා හොඳ , ඒ සියල්ල ඇති පොරොන්දු විශේෂාංග ප්ලස් ලක්ෂණ.


දිගු පිළිතුර:

පොරොන්දු:

  • එක් වරක් භාවිතා කරන්න "දත්ත එක් වරක් ආපසු එවන්න"
  • අවලංගු කිරීමක් නැත
  • එක් සවන්දෙන්නෙක්
  • සොකට් සහාය එක් සවන්දෙන්නෙකු නොමැත

නිරීක්ෂණය කළ හැකි:

  • දත්ත වෙනස් වන විට දත්ත බොහෝ වාරයක් ආපසු එවන්න
  • සහාය අවලංගු කරන්න
  • ආධාරක සොකට්
  • බොහෝ සවන්දෙන්නන්ට සහාය වන්න සහ දත්ත වෙනස් වන විට ඔවුන්ට දන්වන්න
  • ආධාරක සිතියම, පෙරණය, අඩු කරන්න

නිරීක්ෂණ ද්‍රව්‍ය වෛෂයිකව වඩා හොඳ යැයි ඔබට කිව හැකි යැයි මම නොසිතමි. මෙහි ඇති විවිධ පිළිතුරු වල සටහන් කර ඇති නිරීක්ෂණ සඳහා අවාසි ගණනාවක් තිබේ. මට කැපී පෙනෙන ඒවා වන්නේ නිරීක්‍ෂණය කළ හැකි සංකීර්ණතාව සහ ඒවා අපේක්ෂාවෙන් / අසින්ක් සමඟ කෙලින්ම ක්‍රියා නොකරන බවයි. නිරීක්‍ෂණය කළ හැකි පුද්ගලයකුගේ හැසිරීම තීරණය කිරීමට ඔබට නොහැකි නිසා මම ඔවුන් සමඟ වැඩ කිරීම ඇත්තෙන්ම දුෂ්කර ය - ඔබ එය ජනනය කළ කේතය දෙස බැලිය යුතුය. පොරොන්දුවක් සමඟ, ඔවුන් ක්‍රියා කරන ආකාරය ඔබ දන්නවා. උදාහරණයක් ලෙස, සමහර විට නිරීක්‍ෂණයකට දායක වීමෙන් අතුරු ආබාධ ඇතිවේ (උදා: http ඉල්ලීමක්), නමුත් සමහර විට එසේ නොවේ.
යෝනා ඇප්ලෙට්‍රි

කෝණික සඳහා, එය ඔබගේ නඩුව මත රඳා පවතී. බොහෝ අවස්ථාවන්හීදී අපි විවිධ ස්ථාන, සොකට්, අවලංගු කිරීම, සිතියම, පෙරණය සහ අඩු කිරීම කෙරෙහි බලපාන සේවාවන් සහ සමහර දත්ත සමඟ වැඩ කරන්නෙමු. එබැවින් එම අවස්ථාවන්ට සහාය නොදක්වන බවට පොරොන්දු වන පරිදි එය වඩා හොඳ වනු ඇත. එබැවින් එය නැවත ඔබගේ නඩුව මත රඳා පවතී
අම්ර් ඉබ්‍රාහිම්

4

පොරොන්දු සහ නිරීක්ෂණවල වැදගත් වෙනස්කම් කිහිපයක් පහත දැක්වේ.

පොරොන්දුව

  • තනි අගයක් පමණක් විමෝචනය කරයි
  • අවලංගු කළ නොහැක
  • වෙනස් කළ නොහැක
  • සැමවිටම අසමමුහුර්තයි

නිරීක්ෂණය කළ හැකි

  • බහු අගයන් විමෝචනය කරයි
  • ක්‍රියාත්මක වන්නේ එය කැඳවූ විට හෝ යමෙකු දායක වූ විට පමණි
  • අවලංගු කළ හැකිය
  • බහුවිධ ග්‍රාහකයින් විසින් එම හවුල් වටිනාකම බෙදාගෙන දායක විය හැකිය. තවද සියලුම ග්‍රාහකයින් එකවර ක්‍රියාත්මක කරනු ඇත.
  • සමහර විට අසමමුහුර්ත විය හැක

වඩා හොඳ අවබෝධයක් සඳහා https://stackblitz.com/edit/observable-vs-promises වෙත යොමු වන්න


4

පිළිගත් පිළිතුර පොදුවේ හොඳ වුවත්, කෝණික සංරචක සමඟ කටයුතු කිරීමේදී ඔබට සෑම විටම පාහේ නිරීක්ෂණය කළ හැකි දෙයක් භාවිතා කිරීමට අවශ්‍ය බව අවධාරණය කරයි. පොරොන්දු අවලංගු කළ නොහැකි අතර ඔබේ සංරචකය විනාශ වුවද එය විසඳනු ඇත. කෝණික එය නොමැති තෙක් සමාව දීමට නැඹුරු වේ.

උදාහරණයක් ලෙස විනාශ වූ සංරචකයක් මත සිදුවන ඕනෑම වෙනස් කිරීමක් අනාවරණය වීම ව්‍යතිරේකයකට හේතු වේ:

ngOnInit() {
  // promise api
  this.service.getData().then(d => {
     this.data = d;
     this.changeDetectorRef.detectChanges();
  });

  // observable api
  this.service.getData().pipe(takeUntil(this.unsubscribe)).subscribe((d) => {
     this.data = d;
     this.changeDetectorRef.detectChanges();
  });
}

පොරොන්දුව විසඳීමට පෙර ඔබේ සංරචකය විනාශ වුවහොත්, පොරොන්දුව විසඳන විට ඔබට attempt to use destroyed viewදෝෂයක් ලැබෙනු ඇත.

විකල්පයක් ලෙස, ඔබ takeUntil රටාව සමඟ නිරීක්‍ෂක භාවිතා කරන්නේ නම්, ඔබේ සංරචකය විනාශ වූ වහාම දායකත්වය අවලංගු වේ.

මෙය තරමක් ව්‍යාකූල උදාහරණයකි, නමුත් විනාශ වූ සංරචකයක් සඳහා කේතය ක්‍රියාත්මක කිරීම බොහෝ විට දෝෂ වලට තුඩු දෙනු ඇත. කිසියම් හේතුවක් නිසා ඔබට එය කිරීමට අවශ්‍ය නැතිනම්: p


4

පොරොන්දුව:

අසින්ක් සිදුවීම් හසුරුවන්නෙකු - පොරොන්දු වස්තුව නිරූපණය කරන්නේ අසමමුහුර්ත මෙහෙයුමක අවසාන නිමාව (හෝ අසමත් වීම) සහ එහි ප්‍රති value ල වටිනාකමයි.

වාක්‍ය ඛණ්ඩය: නව පොරොන්දුව (ක්‍රියාත්මක කරන්නා);

උදා:

var promise_eg = new Promise(function(resolve, reject) {
  setTimeout(function() {
    resolve('foo');
  }, 300);
});

promise_eg.then(function(value) {
  console.log(value);
  // expected output: "foo"
});

console.log(promise_eg);

රූප විස්තරය මෙහි ඇතුළත් කරන්න

පොරොන්දුව ගැන: එයට එක් නල මාර්ගයක් ඇත, එබැවින් එය අගයන් ලබා දෙන්නේ එක් වරක් පමණි. වරක් ඔබ ඇමතූ එහි එක් මාර්ග හසුරුවන්නා ඔබට අවලංගු කළ නොහැක. () සහ පසුව () වටා සෙල්ලම් කළ හැකි ප්‍රයෝජනවත් සින්ටැක්ස්

නිරීක්ෂණ:

නිරීක්‍ෂණය යනු කාලයත් සමඟ බහුවිධ අගයන් එකතු කිරීමකි. එය සැබවින්ම අසංක මෙහෙයුම් සඳහා විශිෂ්ට ප්‍රවේශයකි. හරස් වේදිකා සහය ඇති rxjs සමඟ කෝණික / ප්‍රතික්‍රියා ආදිය සමඟ එය කළ හැකිය .

එහි ක්‍රියාව ධාරා ලයිනර් වැනි ය. බහු නල මාර්ග විය හැකිය. එබැවින් නිර්වචනය කළ පසු ඔබට බොහෝ ස්ථානවල ප්‍රතිලාභ ලබා ගැනීමට දායක විය හැකිය.

සින්ටැක්ස්: import * as Rx from "@reactivex/rxjs"; ආරම්භයට:

Rx.Observable.fromEvent(button, "click"),
Rx.Subject()

යනාදිය

දායක වීමට: RxLogger.getInstance();

උදා:

import { range } from 'rxjs';
import { map, filter } from 'rxjs/operators';

range(1, 200).pipe(
  filter(x => x % 2 === 1),
  map(x => x + x)
).subscribe(x => console.log(x));

එය බහු නල මාර්ගයට සහය දක්වන බැවින් ඔබට ප්‍රති location ල විවිධ ස්ථානයකට දායක විය හැකිය, රූප විස්තරය මෙහි ඇතුළත් කරන්න එයට පොරොන්දු වලට වඩා බොහෝ හැකියාවන් ඇත.

භාවිතය: එයට තවත් හැකියාවන් ඇතmap, filter, pipe, map, concatMap etc


3

නිබන්ධනය සහ ලියකියවිලි පළමු වරට කියවීමෙන් මා ඒ දෙසට දිව ගිය දෙයක් බහු විකාශනය පිළිබඳ අදහස විය.

පෙරනිමියෙන්, බහු දායකත්වයන් නිරීක්‍ෂණය කළ හැකි බහුවිධ utions ාතන අවුලුවන බව ඔබ දන්නා බවට වග බලා ගන්න. එක් HTTP ඇමතුමකට බහුවිධ දායකත්වයන් ඔබ .share()(බහු විකාශනය සක්‍රීය නොකරන්නේ නම්) එක හා සමාන HTTP ඇමතුම් කිහිපයක් අවුලුවනු ඇත .

පොරොන්දුවක් මඟින් වරකට එක් දෙයක් සමඟ ගනුදෙනු කිරීමට, එහි දත්ත ලිවීමට, ව්‍යතිරේක හැසිරවීමට, අසින්ක් / අපේක්‍ෂා කිරීම වැනි සිසිල් දේවල් සඳහා භාෂා සහාය ඇත.

නිරීක්‍ෂකයකුට සීනු හා විස්ල් රාශියක් ඇත, නමුත් ඔබ වැඩ කරන බලය තේරුම් ගත යුතුය හෝ එය අනිසි ලෙස භාවිතා කළ හැකිය.


3

නිරීක්‍ෂණය කළ හැකි “අවලංගු කළ හැකි” යන තර්කය භාවිතා කරන බොහෝ දෙනෙක් මට පෙනේ, නමුත් පොරොන්දුව “අවලංගු කළ හැකි” බවට පත් කිරීම තරමක් සුළු කාරණයකි.

function cancellablePromise(body) {
  let resolve, reject;
  const promise = new Promise((res, rej) => {
    resolve = res; reject = rej;
    body(resolve, reject)
  })
  promise.resolve = resolve;
  promise.reject = reject;
  return promise
}

// Example 1: Reject a promise prematurely
const p1 = cancellablePromise((resolve, reject) => {
  setTimeout(() => resolve('10', 100))
})

p1.then(value => alert(value)).catch(err => console.error(err))
p1.reject(new Error('denied')) // expect an error in the console

// Example: Resolve a promise prematurely
const p2 = cancellablePromise((resolve, reject) => {
  setTimeout(() => resolve('blop'), 100)
})

p2.then(value => alert(value)).catch(err => console.error(err))
p2.resolve(200) // expect an alert with 200


3

නිරීක්ෂණ බොහෝ විට පොරොන්දු සමඟ සැසඳේ. මෙන්න ප්‍රධාන වෙනස්කම් කිහිපයක්:

නිරීක්ෂණ ප්‍රකාශන වේ; දායකත්වය ලැබෙන තෙක් ගණනය කිරීම ආරම්භ නොවේ. මැවීම මත වහාම ක්‍රියාත්මක වන බවට පොරොන්දු වේ. ඔබට ප්‍රති .ලය අවශ්‍ය විටෙක ක්‍රියාත්මක කළ හැකි වට්ටෝරු නිර්වචනය කිරීමට මෙය නිරීක්‍ෂණයන් ප්‍රයෝජනවත් කරයි.

නිරීක්ෂණ මගින් බොහෝ අගයන් සපයයි. පොරොන්දු එකක් සපයයි. කාලයත් සමඟ බහුවිධ අගයන් ලබා ගැනීම සඳහා නිරීක්‍ෂණයන් ප්‍රයෝජනවත් වේ.

නිරීක්ෂණ මගින් දම්වැල සහ දායකත්වය අතර වෙනස හඳුනා ගනී. පොරොන්දු ඇත්තේ .තන් () වගන්ති පමණි. කාර්යය ක්‍රියාවට නැංවීමකින් තොරව පද්ධතියේ අනෙකුත් කොටස් සඳහා භාවිතා කළ හැකි සංකීර්ණ පරිවර්තන වට්ටෝරු නිර්මාණය කිරීම සඳහා මෙය නිරීක්‍ෂණයන් ප්‍රයෝජනවත් කරයි.

නිරීක්‍ෂක දායකත්වය () දෝෂ හැසිරවීමට වගකිව යුතුය. දරුවාට පොරොන්දු තල්ලුවීමේ දෝෂ පොරොන්දු වේ. මෙය නිරීක්‍ෂණයන් මධ්‍යගත හා පුරෝකථනය කළ හැකි දෝෂ හැසිරවීම සඳහා ප්‍රයෝජනවත් වේ.

ANGULAR.IO ලියකියවිලි වලින් ඔබට සොයාගත හැකි සරලම වෙනස එයයි. විවේක පිළිතුර බොහෝ දෙනා විසින් ලබා දෙනු ලැබේ


2

නිරීක්ෂණය කළ හැකි සහ පොරොන්දු අතර මූලික වෙනස:

රූප විස්තරය මෙහි ඇතුළත් කරන්න


2
කරුණාකර ඔබගේ සටහන සංස්කරණය කර තිර පිටපත් වෙනුවට සත්‍ය අන්තර්ගතය පෙළ ලෙස පෙන්වන්න. අනෙක් අයට ඔබගේ පින්තූර පිටපත් කර ඇලවිය නොහැක. විස්තර සඳහා මෙහි බලන්න. ඔබට ස්තුතියි.
පැන්ග්

2
  1. පොරොන්දු යොමු වී ඇත්තේ තනි අගයන් හෝ විසඳුම් සඳහා පමණි, නිරීක්‍ෂණය යනු දත්ත ප්‍රවාහයයි.

  2. නිරීක්ෂණ අවලංගු කළ හැකි නමුත් පොරොන්දු අවලංගු කළ නොහැක.

අවම වශයෙන් දන්නා එක, මට අවම වශයෙන්

  1. පොරොන්දු සැමවිටම අසමමුහුර්ත ස්වභාවයකින් යුක්ත වන නමුත් නිරීක්‍ෂණය කළ හැකි සමමුහුර්ත හා අසමමුහුර්ත විය හැකිය.

1
  1. පොරොන්දුවක් උනන්දුවක් දක්වන අතර, නිරීක්ෂණය කළ හැකි කෙනෙක් කම්මැලි ය,
  2. පොරොන්දුවක් සැමවිටම අසමමුහුර්ත වන අතර නිරීක්ෂණය කළ හැකි එකක් සමමුහුර්ත හෝ අසමමුහුර්ත විය හැකිය,
  3. පොරොන්දුවක් මඟින් තනි අගයක් ලබා
    දිය හැකි අතර, නිරීක්ෂණය කළ හැකි වන්නේ සාරධර්ම ප්‍රවාහයකි (0 සිට බහු අගයන් දක්වා),
  4. නව සැකසූ ප්‍රවාහයක් ලබා ගැනීම සඳහා ඔබට RxJS ක්‍රියාකරුවන් නිරීක්ෂණය කළ හැකි ස්ථානයකට අයදුම් කළ හැකිය.

1

පොරොන්දුව

අසමමුහුර්ත මෙහෙයුමක් සම්පූර්ණ වූ විට හෝ අසමත් වූ විට පොරොන්දුවක් තනි සිදුවීමක් හසුරුවයි.

සටහන: අවලංගු කිරීමට සහාය දෙන පොරොන්දු පුස්තකාල එහි ඇත, නමුත් ES6 පොරොන්දුව මෙතෙක් සිදු නොවේ.

නිරීක්ෂණය කළ හැකි

නිරීක්‍ෂණය කළ හැකි ධාරාවක් වැනි ය (බොහෝ භාෂාවලින්) සහ එක් එක් සිදුවීම සඳහා ඇමතුම් ලබා ගැනීම කැඳවනු ලබන සිදුවීම් ශුන්‍ය හෝ වැඩි ගණනක් පසු කිරීමට ඉඩ දෙයි.


-2

මෙම මාතෘකාව පිළිබඳ දැනටමත් පිළිතුරු රාශියක් ඇති බැවින් මම අතිරික්තයක් එකතු නොකරමි.

නමුත් පොරොන්දු සමඟ සසඳන විට භාවිතා කළ හැකි නිරීක්‍ෂණය කළ හැකි / කෝණික සහ අරුමපුදුම දේ ඉගෙන ගැනීමට පටන් ගත් අයෙකුට , සෑම දෙයක්ම නිරීක්ෂණය කළ හැකි ලෙස තබා ගැනීමටත්, ඔබේ ව්‍යාපෘතියේ පවතින සියලුම පොරොන්දු නිරීක්‍ෂණය කළ හැකි බවට පරිවර්තනය කිරීමටත් මම නිර්දේශ කරමි.

හුදෙක් කෝණික රාමුව සහ එහි ප්‍රජාව සියල්ලම නිරීක්‍ෂණය කළ හැකි බැවිනි. එබැවින් ඔබ රාමු සේවා හෝ තෙවන පාර්ශවීය මොඩියුලයන් ඒකාබද්ධ කර සෑම දෙයක්ම එකට බැඳ තබන විට එය ප්‍රයෝජනවත් වනු ඇත.


සියලු පසුබෑම මම අගය කරන නමුත් නිරීක්‍ෂණයන් පිළිබඳ පොරොන්දු භාවිතා කිරීම සඳහා ඔබේ කෝණික ව්‍යාපෘතියේ තවමත් ප්‍රයෝජනවත් විය හැකි අවස්ථා කිහිපයක් ලැයිස්තුගත කිරීම සඳහා යමෙකු නිසි අදහස් දැක්වීමක් නොකරන්නේ නම් මම තවමත් මගේ මතය අවධාරනය කරමි.

ඇත්ත වශයෙන්ම, සෑම අවස්ථාවකම කිසිදු මතයක් 100% ක් නිවැරදි නැත, නමුත් අවම වශයෙන් මම සිතන්නේ කෝණික රාමුව තුළ ක්‍රියාත්මක කරන නිත්‍ය වාණිජ ව්‍යාපෘති සඳහා 98% ක් වත්, නිරීක්‍ෂණය කළ හැකි නිවැරදි මාර්ගයයි.

ඔබගේ සරල විනෝදාංශ ව්‍යාපෘතියේ ආරම්භක අවස්ථාවේදී ඔබ එයට අකමැති වුවද, ඔබ කෝණික සමඟ අන්තර්ක්‍රියා කරන සියලුම අංග පාහේ ඔබට වැටහෙනු ඇත, සහ බොහෝ කෝණික හිතකාමී තෙවන පාර්ශවීය රාමුවක් නිරීක්ෂණ භාවිතා කරයි, එවිට ඔබ ඔවුන් සමඟ සන්නිවේදනය කිරීම සඳහා ඔබේ පොරොන්දුව නිරන්තරයෙන් නිරීක්ෂණය කළ හැකි බවට පරිවර්තනය කිරීම අවසන් විය.

එම සංරචකවලට ඇතුළත් නමුත් ඒවාට පමණක් සීමා නොවේ: HttpClient, Form builder, කෝණික ද්‍රව්‍ය මොඩියුල / දෙබස්, Ngrx ගබඩාව / ප්‍රයෝග සහ ngx-bootstrap.

ඇත්ත වශයෙන්ම, පසුගිය වසර දෙක තුළ මා සමඟ කටයුතු කළ කෝණික පරිසර පද්ධතියෙන් ඇති එකම පොරොන්දුව එයයි APP_INITIALIZER.


-2

ජාවාස්ක්‍රිප්ට් / යතුරු ලියනයෙහි අසමමුහුර්ත ක්‍රියාකාරිත්වය සමඟ වැඩ කිරීමට නිරීක්ෂණ සහ පොරොන්දු අපට උපකාර කරයි. බොහෝ අවස්ථාවන්හිදී ඒවා බෙහෙවින් සමාන ය, කෙසේ වෙතත්, ඔවුන් අතර තවමත් යම් වෙනස්කම් තිබේ.

රූප විස්තරය මෙහි ඇතුළත් කරන්න


1
කරුණාකර ඔබගේ සටහන සංස්කරණය කර තිර පිටපත් වෙනුවට සත්‍ය පෙළ පෙන්වන්න. අනෙක් අයට ඔබගේ පින්තූර පිටපත් කර ඇලවිය නොහැක. විස්තර සඳහා මෙහි බලන්න. ඔබට ස්තුතියි.
පැං

එය කේතයක් නොව සරල තොරතුරු හැර, එබැවින් එය රූපයක් ලෙස පළ කිරීම සුදුසු යැයි මම සිතමි
Alator

1
කුඩ්වෙන්කට්ගේ යූ ටියුබ් වීඩියෝ වලින් පිටපත් කිරීම නවත්වන්න. මගෙන් පහත් කරන්න! :)
ප්‍රතික්
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.