我在使用firestore的角度服务中有以下代码,没有语法错误,它工作正常,
问题是返回类型,因为我使用take(1)
我希望返回类型为Observable<Client>
fetchByUserId(uid: string): Observable<Array<Client>> {
return this.collection(ref => ref.where(`users.${uid}`, '>', 0))
.valueChanges()
.take(1);
}
我尝试使用.first()
,但问题是使用first
observable完成,我想继续流式传输。
答案 0 :(得分:1)
.first()和.take(1)实际上会做(almost)同样的事情。
您想要的是将结果数组映射到数组的第一个元素。
你应该可以插入这样的地图:
function changeDir(d, v, min, max) {
return v > max || v < min ? -d : d;
}
function draw() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.fillStyle = col;
ctx.fillRect(x, y, w, h);
// Change direction if necessary
dx = changeDir(dx, x, 0, 150);
dy = changeDir(dy, y, 0, 150);
dw = changeDir(dw, w, 0, 300);
dh = changeDir(dh, h, 0, 300);
// Accumulate
x += dx;
y += dy;
w += dw;
h += dh;
}
这假设this.collection(...)实际返回return this.collection(...)
.map(arr => arr[0])
,在这种情况下,此Observable<Array<Client>>
的结果将返回map