您如何将代码从rxjs v5转换为rxjs v6以进行捕获?

时间:2018-07-06 17:52:35

标签: javascript angular typescript rxjs

我正在跟踪thinkster.io上的一个教程,该教程涉及使用angular 2+编码“与服务器交互和认证的服务”。我在使用RXJS v5时陷入了这一节,无法将其转换为新的RXJS v6以使代码正常工作。

我正在处理出现错误的以下文件形式:

user.service.ts

WebElement element = new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(By.xpath("//input[@name='selectedUpgCtn']")));
Actions action = new Actions(driver);
action.moveToElement(element).click().build().perform();

api.service.ts:

JavascriptExecutor js = (JavascriptExecutor)driver;   
js.executeScript("arguments[0].click();",driver.findElement(By.xpath("//input[@name='selectedUpgCtn']")));

运行代码会给我以下错误:src / app / shared / services / api.service.ts(5,15)中的错误:TS1003错误:预期的标识符。

摆脱它的唯一方法是注释掉这行代码 import { Observable } from 'rxjs'; import { BehaviorSubject } from 'rxjs'; import { ReplaySubject } from 'rxjs'; import { map, catch } from 'rxjs/operators'; @Injectable() export class UserService { private currentUserSubject = new BehaviorSubject<User>(new User()); public currentUser = this.currentUserSubject.asObservable().distinctUntilChanged(); private isAuthenticatedSubject = new BehaviorSubject<boolean>(false); public isAuthenticated = this.isAuthenticatedSubject.asObservable(); attemptAuth(type, credentials): Observable<User> { let route = (type === 'login') ? '/login' : ''; return this.apiService.post('/users' + route, {user: credentials}) .map( data => { this.setAuth(data.user); return data; } ); } getCurrentUser(): User { return this.currentUserSubject.value; } }。但是代码无法按教程预期的那样运行。

1 个答案:

答案 0 :(得分:1)

根据迁移文档,您所需要做的就是将catch更改为catchError并利用新的管道语法。

请参见HowTo: Convert to pipe syntax

  

以下运算符名称已更改,因为它们是点链接的   名称是JavaScript中的保留字:

     
      
  • do-> tap
  •   
  • catch-> catchError
  •   
  • switch-> s witchAll
  •   
  • finally-> finalize
  •   
     

要将点链运算符转换为可管道运算符,请包装所有   从源中可观察到pipe()方法中的运算符,请删除   点,并添加逗号以将每个操作作为参数传递给pipe()。

     

例如,以下代码使用链接:

source
 .map(x => x + x)
 .mergeMap(n => of(n + 1, n + 2)
   .filter(x => x % 1 == 0)
   .scan((acc, x) => acc + x, 0)
 )
 .catch(err => of('error found'))
 .subscribe(printResult);
     

要转换为管道:

source.pipe(
 map(x => x + x),
 mergeMap(n => of(n + 1, n + 2).pipe(
   filter(x => x % 1 == 0),
   scan((acc, x) => acc + x, 0),
 )),
 catchError(err => of('error found')),
).subscribe(printResult);