我正在制作一个函数,它同时接受.toArray()
和不接受。有没有一种有条件的方法可以在es6、es7或es8中添加它?
await db
.collection(collection)
.find(params)
.toArray() //I want tis conditionally added or not
从这个意义上说(这不起作用(
multiple && .toArray()
或者这只能通过两种方法实现?
有没有一种方法可以在JavaScript中有条件地缩短对象的成员函数?
不是。您有一组链接的方法,不能有条件地将某些内容插入到链中。
我的感觉是,最清晰的选择是:
let x = db.collection(collection).find(params);
if (someCondition) x = await x.toArray();
还有其他奇怪的事情,比如提前在对象上放置一个no-op方法,然后从一个有时包含"toArray",有时包含"noop"的变量中执行一个方法。
let x = await db.collection(collection).find(params)[someCondition ? "toArray" : "noop"]();
但是,我不认为我自己会用这种方式编写代码,因为我认为它不是很清楚。
FYI,您的特定示例有点奇怪,因为.find()
返回一个游标对象,而.toArray()
返回一个解析为数组的promise。因此,您还要求以一种方式与另一种方式获得不同类型的数据。看起来这种不同的结果类型无论如何都必须走不同的代码路径,所以条件分支不仅仅是这一步。这表明,人们应该从更大的角度来看待整个问题,而不仅仅是这一步或顺序,以找到最佳解决方案。