Javascript 如何利用可观测数据处理角度误差

Javascript 如何利用可观测数据处理角度误差,javascript,angular,error-handling,observable,Javascript,Angular,Error Handling,Observable,我不是返回新的数据,而是返回返回者或丢失的数据 演示:您可以像这样手动抛出一个可观察到的错误 import { Observable, of, throwError } from "rxjs"; // let mydata = undefined; let mydata = [1]; let MissingData = "No data available"; function getData(): Observable<any> {

我不是返回新的数据,而是返回返回者或丢失的数据

演示:

您可以像这样手动抛出一个可观察到的错误

import { Observable, of, throwError } from "rxjs";

// let mydata = undefined;
let mydata = [1];
let MissingData = "No data available";

function getData(): Observable<any> {
  if (mydata !== undefined) {
    return new Observable(observer => {
      observer.next(mydata);
      observer.complete();
    });
  } else if (mydata === undefined) {
    return throwError(MissingData);
  }
}

getData().subscribe((res) => {
 console.log ('data:', res);
}, err => {
  console.log('err:', err)
})
然后像这样订阅

  else if (this.mydata === undefined){
   throw Observable.throw(MissingData)
  }
因此,完整的代码如下所示:

service.getData().subscribe((res) => {
 console.log (res);
}, err => {
  console.error(err)
})

我也做了一些重构,只是为了把代码缩短一点。希望能有帮助。干杯。

尝试使用承诺。我在这里为您提供了一个示例代码

let mydata = [a,b,c,d,1,2,3]
let MissingData = "No data available"

  public getData(): Observable<any[]> {

    if (mydata) {
    return new Observable(observer => {
      observer.next(mydata);
      observer.complete();
   
    });
  }
   throw Observable.throw(MissingData)
}

//Somewhere in the scripts
service.getData().subscribe((res) => {
     console.log (res);
    }, err => {
      console.error(err)
    })

在您的方法中,如果数组为空,那么它将返回空数据:[]不是MissingData消息?是的,当然,因为空数组是有效数据,但是如果需要,您可以添加一个条件来检查数组是否为空。我们仅在变量未定义的情况下进行检查:mydata!==未定义如果mydata&&mydata.length>0,我也会尝试,如果这是真的,它会返回数据,但如果我执行其他操作,如果是this.VitalSigns.length,什么是VitalSigns?您可以简单地编写:if mydata&&mydata.length>0{observer.nextmydata;}else{throwErrorMissingData}
service.getData().subscribe((res) => {
 console.log (res);
}, err => {
  console.error(err)
})
let mydata = [a,b,c,d,1,2,3]
let MissingData = "No data available"

  public getData(): Observable<any[]> {

    if (mydata) {
    return new Observable(observer => {
      observer.next(mydata);
      observer.complete();
   
    });
  }
   throw Observable.throw(MissingData)
}

//Somewhere in the scripts
service.getData().subscribe((res) => {
     console.log (res);
    }, err => {
      console.error(err)
    })
let mydata = [a,b,c,d,1,2,3]
let MissingData = "No data available"

public getData(){
return new Promise((resolve, reject) =>{
    if (this.mydata !== undefined) {  resolve(mydata); }
    else if (this.mydata === undefined){ reject(MissingData)}
} );
}


getData().then(
resolve => {
// succcess
},
reject =>{
// rejected.
});