JavaScript - 有条件地调用函数

Ale*_*lls 4 javascript mongoose mongodb node.js

如果我希望我的后端Node.js API是通用的,我想让客户自己确定他们是否需要'精益'MongoDB查询或完整查询.

为了回到JSON(实际上,POJSO,而不是JSON),我们使用lean(),如下所示:

Model.find(conditions).limit(count).lean().exec(function (err, items) {});
Run Code Online (Sandbox Code Playgroud)

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

if(isLean){

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

else(){

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

}
Run Code Online (Sandbox Code Playgroud)

有两个不同的调用,这并不是什么大不了的事情,但想象一下,如果我们有多个条件,而不仅仅是isLean,那么我们会有一个因素的事情,我们有很多次调用,而不仅仅是两个不同的调用.

所以我想知道有条件地打电话的最佳方式是什么lean()- 我唯一的想法是如果isLean是假的话,将精益变成无操作......

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

function leanSurrogate(isLean){
  if(isLean){
    return this.lean();
  }
  else{
   return this;
 }
}
Run Code Online (Sandbox Code Playgroud)

谁有更好的东西?

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

JLR*_*she 5

我想你是在思考这个问题.您不必限制自己一次使用一系列长方法调用.

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

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

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

query.exec(function (err, items) {});
Run Code Online (Sandbox Code Playgroud)

  • @AlexMills谁是"他们",你用"内联函数"指的是什么?你似乎并没有谈论[这些](https://en.wikipedia.org/wiki/Inline_function)这是我所知道的唯一内联函数类型. (2认同)