【问题标题】:JavaScript - conditionally call a functionJavaScript - 有条件地调用函数
【发布时间】:2015-10-31 19:10:44
【问题描述】:

如果我希望我的后端 Node.js API 是通用的,我想让客户自己确定他们想要一个“精简”的 MongoDB 查询还是一个完整的查询。

为了只取回 JSON(实际上是 POJSO,而不是 JSON),我们像这样使用lea():

Model.find(conditions).limit(count).lean().exec(function (err, items) {});

但是,如果我想有条件地调用lean()怎么办?

if(isLean){

 Model.find(conditions).limit(count).lean().exec(function (err, items) {});

else(){

 Model.find(conditions).limit(count).exec(function (err, items) {});

}

有两个不同的调用并不是什么大不了的事,但想象一下,如果我们有多个条件,而不仅仅是isLean,那么我们会有一个阶乘的事情发生,我们有很多调用,而不是只有 2 个不同的。

所以我想知道有条件地调用lean() 的最佳方法是什么——我唯一的想法是如果isLean 为假,则将精益变成无操作...

这将涉及一些猴子修补 TMK -

function leanSurrogate(isLean){
  if(isLean){
    return this.lean();
  }
  else{
   return this;
 }
}

谁有更好的?

(或者也许 mongoose API 已经有了这个:lean(false)lean(true)...并且默认为 true...)

【问题讨论】:

标签: javascript node.js mongodb mongoose


【解决方案1】:

我认为你想多了。您不必限制自己一次使用一长串方法调用。

您可以在需要的地方分解它,从而避免重复代码:

var query = Model.find(conditions).limit(count);

if (isLean) {
    query = query.lean();
}

query.exec(function (err, items) {});

【讨论】:

  • 但他们说要做的一件事是尽可能不要使用“内联函数”
  • @AlexMills 谁是“他们”,“内联函数”指的是什么?您似乎不是在谈论 these,这是我所知道的唯一内联函数类型。
  • @AlexMills 好的,我已经阅读了它,但我仍然看不出您对我的示例的哪一部分有异议。 Petka 甚至没有明确他所说的“内联函数”是什么意思,但他似乎指的是闭包。我没有在你的代码中引入任何闭包。
  • 是的,我其实不知道他指的是什么
猜你喜欢
  • 1970-01-01
  • 2011-01-14
  • 1970-01-01
  • 2016-02-15
  • 2013-05-22
  • 2020-08-04
  • 2012-12-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多