node.js - 从嵌套块返回最终的 observable
问题描述
大家好,我有以下代码:
return this.facebook.getFacebookUserInfos(req.token).pipe(
switchMap(user => {
return this._repo.findBy({email: user.email}).pipe(
switchMap(foundUser => {
// assume foundUser is always null
if (!foundUser) {
const fromFacebook = this.createUserModel(user, event.queryStringParameters);
return this._repo.save(fromFacebook);
}
return of(foundUser);
}));
}),
switchMap(user => {
return this.getAuthToken(user)
}),
map(response => Response.ok(response.body, response.headers)),
catchError((err) => of(Response.errorResponse(err)))
);
我被卡住了,因为它调用了 this._repo.save(fromFacebook) 并且不等待可观察对象完成并使用另一个可观察对象进入下一个切换地图。如何强制块在传递到下一个之前等待 this._repo.save(fromFacebook) 的结果?save 方法也返回一个 observable。在此先感谢您的帮助。干杯
解决方案
试试下面的代码片段。
return this.facebook.getFacebookUserInfos(req.token).pipe(
switchMap(user => {
return this._repo.findBy({email: user.email}).pipe(
switchMap(foundUser => {
// assume foundUser is always null
if (!foundUser) {
const fromFacebook = this.createUserModel(user, event.queryStringParameters);
return this._repo.save(fromFacebook);
} else {
return of(foundUser);
}
}));
}),
concatMap(user => {
return this.getAuthToken(user)
}),
map(response => Response.ok(response.body, response.headers)),
catchError((err) => of(Response.errorResponse(err)))
);
推荐阅读
- reactjs - 使用 React 测试库和 typescript 进行 Axios 单元测试
- python - Python:无法在我的程序中找到错误
- firebase - 如何在第二个流中使用流值?
- android - SceneForm 场景视图在片段中始终为黑色
- node.js - 我如何错误地使用 apollo combineResolvers()?
- javascript - 数据未在 VueJS 中使用提供/注入从父级注入到子级
- java - 如何使用 Mockito 模拟 RestTemplate 的最终新实例
- java - 具有空间数据的四叉树
- unit-testing - 没有匹配的调用。所有调用:方法(对象实例)
- azure - Azure DevOps - 服务原则不起作用