链与HttpClient帖子可观察

时间:2018-10-29 21:43:41

标签: typescript angular6 rxjs6

我是TypeScript(甚至JavaScript)和Angular 6的新手。我必须检索一个可观察的值,将其传递给func faceIndexNoFacesSearch() { let rekognition = AWSRekognition.default() let faceRequest = AWSRekognitionSearchFacesByImageRequest() do { let image = AWSRekognitionImage() image?.s3Object = AWSRekognitionS3Object() image?.s3Object?.bucket = "us-east-1-bucket" image?.s3Object?.name = "ms-2.jpg" faceRequest!.image = image faceRequest!.collectionId = "MyCollectionID" rekognition.searchFaces(byImage: faceRequest!).continueWith { (response) -> Any? in XCTAssertNil(response.error) XCTAssertNotNil(response.result) if let result = response.result { XCTAssertNotNil(result.faceMatches) } return nil }.waitUntilFinished() } catch { print("exception") } } 并处理响应。

我无法正确执行此操作。由于return在这里HttpClient.post,因此以下内容无法编译。但是我如何正确呢?

Observable<Observable<string>>

我试图将第二个映射refreshTokenCall: Observable<string> = null; refreshToken(): Observable<string> { if (!this.refreshTokenCall) { // Here is the error: Type 'Observable<Observable<string>>' is not assignable to type 'Observable<string>'. // Type 'Observable<string>' is not assignable to type 'string'. [2322] this.refreshTokenCall = this.getToken().pipe( map(token => { console.log("try refresh") return this.http.post<Token>(AuthService.REFRESH_TOKEN_URL, JSON.stringify({token: token})).pipe( map(data => data.token), shareReplay(), tap(token => { console.log("save token after refresh"); this.saveToken(token); }), finalize(() => this.refreshTokenCall = null) ); }) ); } // if return this.refreshTokenCall; 放入第一个映射map(data => data.token),但是参数pipe的类型为data。至少在语法上起作用的是用Observable<Token>替换第一个map。我认为然后我在documentation about switchMap

上遇到了问题
  

switchMap停止从较早发出的内部Observable中发射项目,并开始从新的内部Observable发射项目。

我希望switchMap条件能够捕获所有后续调用。但是不知何故,我的Observable管道未处理。日志条目不会出现。

所以我在这里做错了吗?

0 个答案:

没有答案