有没有一种方法可以在JavaScript中有条件地缩短对象的成员函数



我正在制作一个函数,它同时接受.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。因此,您还要求以一种方式与另一种方式获得不同类型的数据。看起来这种不同的结果类型无论如何都必须走不同的代码路径,所以条件分支不仅仅是这一步。这表明,人们应该从更大的角度来看待整个问题,而不仅仅是这一步或顺序,以找到最佳解决方案。

最新更新