我正在跟踪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;
}
}
。但是代码无法按教程预期的那样运行。
答案 0 :(得分:1)
根据迁移文档,您所需要做的就是将catch
更改为catchError
并利用新的管道语法。
请参见HowTo: Convert to pipe syntax:
以下运算符名称已更改,因为它们是点链接的 名称是JavaScript中的保留字:
do
->tap
catch
->catchError
switch
-> switchAll
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);