0

私はjavascriptについて知っていてcallapplyそれらを単純な関数に適用することができますが、以下に示すような連鎖メソッド呼び出しにそれらを適用することになると、完全に混乱します。

db.collection("posts").find({}, {limit:10, sort:[['views', -1]]}).toArray(function(err, posts) {
   console.log(posts)
});

[{}, {limit:10, sort:[['views', -1]]} ]またはを使用して上記のメソッドに引数を渡すことは可能ですcallapply

これを使用して、引数を外部配列に保持することにより、引数に簡単にアクセスして変更できるようにしたいと思います。

ありがとうございました

4

2 に答える 2

0

連鎖を維持する方法はないと思います。中間結果を保存する必要があります。

var posts = db.collection("posts");
posts
    .find.apply(posts, argsarray)
    .toArray(function(err, posts) {
        console.log(posts)
    });
于 2012-09-21T19:15:31.837 に答える
0

ご存知かもしれませんが、これらの機能は同じです。

obj.func(1, 2, 3);
obj.func.apply(obj, [1, 2, 3]);

これを念頭に置いて、次のことができます。

db.collection("posts").find.apply(
  db.collection("posts")
  [ {}, {limit:10, sort:[['views', -1]]} ]
).toArray(...);

もちろん、コレクションを2回呼び出すため、これはかなり非効率的です。だからあなたはすることができます:

var collection = db.collection("posts");
collection.find.apply(
  collection
  [ {}, {limit:10, sort:[['views', -1]]} ]
).toArray(...);
于 2012-09-21T19:15:33.807 に答える