一开始我的印象combineLast是很合适,但是当我阅读文档时,它似乎不是:“请注意,combineLatest在每个可观察对象发出至少一个值之前,它不会发出初始值。”......当然我正好碰到那个异常。我试着forkJoin和merge不同的组合,但我不能得到它的权利。
用例非常简单,该方法someObs返回一个0或更多的可观察对象,我在其上循环。基于SomeObs对象上的一个值,我将一个新构造的 observable 推入OtherObs[]一个Arrayof Observable<OtherObs[]>。这个数组“需要”被合并成一个单一的 observable,在返回它之前我想做一些转换。
具体来说,我很难用combineLast合适的东西替换操作员……
public obs(start: string, end: string): Observable<Array<OtherObs>> {
return this.someObs().pipe(
mergeMap((someObs: SomeObs[]) => {
let othObs: Array<Observable<OtherObs[]>> = [];
someObs.forEach((sobs: SomeObs) => {
othObs.push(this.yetAnotherObs(sobs));
});
return combineLatest<Event[]>(othObs).pipe(
map(arr => arr.reduce((acc, cur) => acc.concat(cur)))
);
})
);
}
private yetAnotherObs(): Observable<OtherObs[]> {
/// ...
}
private somObs(): Observable<SomeObs[]> {
/// ...
}
Run Code Online (Sandbox Code Playgroud) 我需要的初始位置cdk-virtual-scroll-viewport不是列表的第一个元素/项目。
现在我找到了scrollToIndex和scrollTo方法,但我只能在 中使用它时才能让它们工作ngAfterViewChecked,这感觉不对。
ngAfterViewChecked是正确的做事方式吗? @ViewChild(CdkVirtualScrollViewport) cdkVirtualScrollViewport: CdkVirtualScrollViewport;
numbers: number[] = [];
constructor() {
for (let index = 0; index < 10000; index++) {
this.numbers.push(index);
}
}
ngAfterViewChecked() {
this.cdkVirtualScrollViewport.scrollToIndex(2000);
}Run Code Online (Sandbox Code Playgroud)
<ul class="list">
<cdk-virtual-scroll-viewport style="height:264px" itemSize="88">
<ng-container *cdkVirtualFor="let n of numbers">
<li style="height:88px">{{ n }}</li>
</ng-container>
</cdk-virtual-scroll-viewport>
</ul>Run Code Online (Sandbox Code Playgroud)
之前的答案为我指明了方向,即如何捕获异步验证错误或重定向。但在我的场景中, aniframe开始发挥作用,它让我整天忙碌。一些指向正确方向的指针会非常有帮助,因为我无法做到正确,尽管错误清楚地说明了哪里出了问题。
场景的:
第二种情况中抛出的错误指出waitForFunction failed: frame got detached。这是有道理的,因为框架不再存在......我发现了,frame.isDetached()但仍然不断抛出相同的错误。我缺少什么或者如何使用此方法使其发挥作用?
let frame = (await page.frames())[0];
...
for (let action of actions) {
if (action.type === '...') {
// ...
}
if (action.type === 'click') {
frame.click("#btn");
// works for scenario 1
await Promise.race([
page.waitForNavigation({ waitUntil: "networkidle2" }),
// ERROR THROWN HERE FOR SCENARIO 2
// `waitForFunction failed: frame got detached`
// the line below doesn't seem to work …Run Code Online (Sandbox Code Playgroud) 第一个想法是使用 anHttpInterceptor但clone(...)方法的签名不包含该observe选项。除了定义{ observe: 'response' }为每个请求的选择,我没有看到另一种尚未...
那么,是否有(如果有的话)全局设置{ observe: 'response' }选项的方法,例如通过?HttpInterceptor
clone(update: {
headers?: HttpHeaders;
reportProgress?: boolean;
params?: HttpParams;
responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';
withCredentials?: boolean;
body?: T | null;
method?: string;
url?: string;
setHeaders?: {
[name: string]: string | string[];
};
setParams?: {
[param: string]: string;
};
}): HttpRequest<T>;
Run Code Online (Sandbox Code Playgroud) angular ×2
angular-cdk ×1
angular7 ×1
iframe ×1
interceptor ×1
javascript ×1
lifecycle ×1
merge ×1
observable ×1
puppeteer ×1
response ×1
rxjs ×1