在用户登录我的应用程序(将其缓存在服务中)后,我想首先准备好一堆数据。
我认为,如果登录成功,将在解析父路由之前将这种数据加载逻辑实现为Resolver
。
更具体地说:在显示用户主页之前,我希望已经加载了一个数据列表,如果该列表不为空,则默认情况下将该列表的第一个元素设置为selected元素。因此,这意味着两个Services
:
ItemsService
:此服务将知道如何请求项目列表,并在第一个请求完成后将其保留在缓存中ItemSelectedService
:此服务将随时知道已将哪个项目设置为选中状态以及以下Resolver
:
@Injectable()
export class ItemsResolver implements Resolve<any> {
constructor(
private itemSelectedService: ItemSelectedService,
private itemsService: ItemsService
) { }
resolve() {
this.itemsService.getAll()
.subscribe((items) => {
if (items.length > 0) {
this.itemSelectedService.setAsSelected(items[0]);
}
});
}
}
#resolve()
需要返回一个Observable
(return this.itemsService.getAll()
就足够了...),但我没有返回任何内容,因为我需要订阅并致电{{1 }}一旦异步获取了项目列表,什么才是实现所需行为的正确方法?
答案 0 :(得分:1)
尝试点按
def UpdatePerson(image, x, y):
screen.blit(image, x, y)
while carryOn:
...
...
oldX = w_x
oldY = w_y
w_x,w_y = worker.create_randomPATH(w_x,w_y)
while(oldX < w_x || oldY < w_y):
randomDir = random.randint(1,2)
if randomDir == 1 && oldX < w_x:
UpdatePerson(worker.image, oldX, w_y)
oldX += 1
elif randomDir == 2 && oldY < w_x
UpdatePerson(worker.image, w_x, oldY)
oldY += 1
做/点击
透明地执行操作或副作用,例如日志记录。 https://www.learnrxjs.io/operators/utility/do.html
答案 1 :(得分:0)
您可以使用 flatmap 来解决链中可观测的问题
@Injectable()
export class ItemsResolver implements Resolve<any> {
constructor(
private itemSelectedService: ItemSelectedService,
private itemsService: ItemsService
) { }
resolve() {
return this.getAll()
.pipe(
flatmap(items => this.setSelectService(item[0]))
)
}
getAll() {
return this.itemsService.getAll();
}
setSelectService(item) {
return this.itemSelectedService.setAsSelected(item);
}
}