angular / angular/angularfire

Error passing queryconstraint in a function call

未關閉
#3,253 1 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視
主要語言
TypeScript
星號
7.8k
分支
2.2k
平均合併
22 小時 28 分鐘
30 天內合併 PR
6

描述

### Version info

**Angular:**
"@angular/core": "^14.0.2",
**Firebase:**
Firebase 9
**AngularFire:**
"^7.4.1"
"rxjs": "~7.4.0",
**Other (e.g. Ionic/Cordova, Node, browser, operating system):**

### How to reproduce these conditions

**Failing test unit, Stackblitz demonstrating the problem**

const constraints1 =[];
constraints1.push(where('read', '==', false));
constraints1.push(orderBy('createdAt', 'desc'));
constraints1.push(limit(1));
dataQuery = query(colRef, ...constraints1);

console.log on constraints1
Constraints1:::[{"fa":{"segments":["read"],"offset":0,"len":1},"da":"==","_a":false,"type":"where"},{"fa":{"segments":["createdAt"],"offset":0,"len":1},"wa":"desc","type":"orderBy"},{"type":"limit","ma":1,"ga":"F"}]

This works fine but passing these constraints to a function
export interface FirestoreQuery{
[x: string]: any;
property:string;
value:any;};

async collectionPA(
ref: CollectionPredicate,
options : FirestoreQuery[]
): Promise {

let wherelist:FirestoreQuery[] = options.filter(x => x.property === 'where');
let orderByList:FirestoreQuery[] = options.filter(x => x.property === 'orderBy');
let limitList:FirestoreQuery[] = options.filter(x => x.property === 'limit');
if (wherelist instanceof Array) {
for (let w of wherelist) {
constraints.push(w.value);
}
}
if (orderByList[0] instanceof Array) {
// It's an array of array
for (let o of orderByList) {
constraints.push(o.value);
}

**dataQuery = query(colRef, ...constraints);**

}

_Console.log on constraints has the following data..._
Constraints:::["where('read', '==', false)","limit(3)"]

The line give an error
ERROR TypeError: n._apply is not a function
at Uh (index.esm2017.js:18542:30)
at angular-fire.js:227:48
at angular-fire.js:160:59
at _ZoneDelegate.invoke (zone.js:372:26)
at Zone.run (zone.js:134:43)
at NgZone.runOutsideAngular (core.mjs:26414:28)
at runOutsideAngular (angular-fire.js:160:35)
at angular-fire.js:227:21
at firebasehelper.service.ts:202:22
at Generator.next ()
**Steps to set up and reproduce**

**Sample data and security rules**
let options : FirestoreQuery[] =[];
options = [
{property:"where", value: "where('read', '==', false)"},
{property:"orderBy",value:"OrderBy('createdAt', 'desc')"},
{property:"limit", value:"limit(3)"},
];

const promiseNotify: Observable = fromPromise(this._firebasehelperService.collectionPA('notifications',options));

### Debug output

** Errors in the JavaScript console **

** Output from `firebase.database().enableLogging(true);` **

** Screenshots **
![image](https://user-images.githubusercontent.com/39094436/183267403-67962346-05f4-4341-a387-920e7a6c0810.png)

### Expected behavior

### Actual behavior

貢獻指南

開啟貢獻指南

研究方向

回報的呼叫位於 firebasehelper.service.ts:202;使用所示選項,透過 Angular 14、Firebase 9 和 AngularFire 7.4.1 重現它。將 query(colRef, ...constraints) 與直接的 constraints1 範例進行比較,並驗證哪些值傳遞到了該呼叫。完成標準是得到一個已確認的最小重現,並明確說明預期結果與實際結果。

由索引模型根據 Issue 內容生成。

評估

技術堆疊
angular, firebase, typescript
領域
database
Issue 類型
缺陷
難度
3/5
預估耗時
1-2 天
活躍度
停滯
描述清晰度
需要釐清
新手友好度
25/100

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。