2014-10-08 138 views
0

我不太明白刪除,爲什麼這不起作用:貓鼬在async.parallel

async.parallel([ 
    SomeStuff.find({}).remove, 
    SomeStuff2.find({}).remove, 
    SomeStuff3.find({}).remove 
], done); 

,而這個工程確定

async.parallel([ 
    function(callback) { 
    SomeStuff.find({}).remove(callback) 
    }, 
    function(callback) { 
    SomeStuff2.find({}).remove(callback); 
    }, 
    function(callback) { 
    SomeStuff3.find({}).remove(callback); 
    } 
], done); 

是不是幾乎一樣嗎? 第一個拋出一個錯誤:

TypeError: Object #<Object> has no method 'cast' 
at Query.remove (/path/to/project/node_modules/mongoose/lib/query.js:1366:10) 

謝謝您的幫助:)

+0

'.remove'沒有綁定到上下文 - 這只是我認爲的一個功能。你可以做Query.remove.bind(SomeStuff.find({}))我想,但是呃。 – 2014-10-08 18:06:10

回答

0

的問題是,你失去的功能方面,當你通過這樣的功能本身。 remove()是一種原型方法,所以它依賴於this的值是正確的。當您自行通過該方法時,this值現在丟失,因此它不能再執行諸如this.cast()之類的操作。

+0

是的,我明白了,謝謝! 爲了達到我想要的東西,我可以使用lodash綁定: 'VAR QUERY1 = SomeStuff.find({});'' VAR QUERY2 = SomeStuff2.find({});'' VAR QUERY3 = SomeStuff3.find({ });'' async.parallel(['' _.bind(query1.remove,QUERY1),'' _.bind(query2.remove,QUERY2),'' _.bind(query3.remove, query3),' '],done);' – ma2s 2014-10-08 18:20:37