0

Mongo 컬렉션에 대한 JavaScript 단위 테스트를 쓰고 있습니다. 컬렉션 배열이 있고 해당 컬렉션에 대한 항목 수 배열을 생성하고 싶습니다. 특히 Array.prototype.map을 사용하고 싶습니다.JavaScript에서 매개 변수로 개체 메서드 전달하기

const collections = [fooCollection, barCollection, bazCollection]; 
const counts = collections.map(Mongo.Collection.find).map(Mongo.Collection.Cursor.count); 

을하지만 그 대신, 나는 Mongo.Collection.find가 정의되지 않은 것을 말해 오류가 발생 :이 같은 뭔가 일을 기대. 이것은 Mongo.Collection이 인스턴스화 된 객체 라기보다는 생성자가 될 수 있다고 생각합니다. 그러나 조금 더 나은 점을 이해하고 싶습니다. 누군가 내 접근 방식이 작동하지 않고 왜 에 find 메서드를 전달할 수 있도록 변경해야하는지 설명 할 수 있습니까? 감사!

+0

'fooCollection' 등이다'Mongo.Collection' 인스턴스? 첫 번째 전화에서 무엇을 찾으려고합니까? –

+2

실제로'Mongo.Collection.prototype.find'를 사용하고 싶습니까? – apsillers

+0

아하. 나는 그것도 생각하고 그것을 시도했지만, 여전히 나에게 정의되지 않은 오류를 주었다. 나는 다시 시도해 보았고'Mongo.Collection.prototype.find'_does_ work. 문제는'map'이'arrayItem.find()'가 아닌 각 요소에 대해'find (arrayItem)'을 호출한다는 것입니다. 나는 내가 원하는 것을하기 위해 익명의 절차를지도에 전달할 수있다. 어쨌든'map'을 두 번 호출하는 대신 단일 함수에서 카운트를 반환 할 수 있기 때문에 아마 더 좋습니다. 도와 주셔서 감사합니다. – Reggie

답변

0

findcount은 컬렉션 인스턴스에서 (this 컨텍스트가있는) 메서드로 호출해야하는 프로토 타입 함수입니다. map하지 않습니다.

가장 좋은 방법은 화살표 기능을 사용하는 것입니다 :

const counts = collections.map(collection => collection.find()).map(cursor => cursor.count()) 

을하지만, 할 수 an ugly trick도 있습니다 당신은 할 수없는 : 그래서

const counts = collections 
.map(Function.prototype.call, Mongo.Collection.prototype.find) 
.map(Function.prototype.call, Mongo.Collection.Cursor.prototype.count); 
관련 문제