cqwcns 发表于 2021-10-1 14:28

JS链式的问题

各位大佬,javascript这种语法叫什么名堂,链式赋值?链式调用?
如果有些值是需要用IF按需加上的,有没有办法分开写?
比如有时我根本不需要skip,有时不需要orderBy等等。

let get = await db.collection('satff').where({rogin: '茂名'}).skip(0).limit(100).orderBy('name', 'asc').get()

我尝试了以下两种方法都不行,必须一次性连起来写条件才能生效。

let GET = db.collection(collection)

if (doc) {
    GET.doc(doc)
} else if (where) {
    GET.where(where)
}
return GET.get()

let GET = db.collection(collection)

if (doc) {
GET.doc=doc
} else if (where) {
GET.where=where
}
return GET.get()


不知道各位大佬有没有什么解决办法。谢谢额

SScrew 发表于 2021-10-1 15:49

本帖最后由 SScrew 于 2021-10-1 15:51 编辑

可以链式是因为方法返回了对象自身,尝试下方代码
let GET = db.collection(collection)
if (doc) GET = GET.doc(doc)
if (where) GET = GET.where(where)
return GET.get()

cqwcns 发表于 2021-10-1 17:18

已解决,谢谢 @SScrew

// 查询
async function get(event) {

// 获得数据
const {
    collection,
    doc,
    where,
    fields,
    skip,
    limit,
    orderBy
} = event

// 声明语句
let get = db.collection(collection)
let total = 1

// 判断doc还是where
if (doc) {
    get = get.doc(doc)
} else {
    get = get.where(where)
    // 查询数据总量(用于前端分页)
    const countResult = await get.count()
    total = countResult.total

    // 跳跃
    if (skip) get = get.skip(skip * limit)

    // 数量
    get.skip(limit || 100)

}

// 字段
if (fields) get = get.field(fields)

// 排序
if (orderBy) {
    orderBy.forEach(element => {
      get = get.orderBy(element, element)
    });
}

res = await get.get()

return {
    res,
    total
}

}

Gaho2002 发表于 2021-10-1 18:03

鬼才逻辑
页: [1]
查看完整版本: JS链式的问题