2013-05-08 35 views
1

我使用節點異步的,我想一個變量傳遞給它使用的第二個參數中的方法......例如:想傳遞一個變量節點異步的地圖方法

async.map(submissions, addScore, function(err, submissions) { 
    if (submissions) { 
     return submissions; 
    } 
    }); 

我想通過與addScore沿userId但我不知道如何做到這一點。

addScore是我的方法,我在每一個提交調用,它需要一個userId

回答

5

可以使用封閉把用戶id進入addScore功能範圍:

var createAddScore = function(userId){ 
    return function(val){ 
     // do something with userID and val 
    } 
} 

則:

async.map(submissions, createAddScore(1), function(err, submissions) { 
    if (submissions) { 
     return submissions; 
    } 
}); 
+0

不太對我的情況下工作。我修改了一下,但我得到undefined不是一個函數。如果我將它從函數閉包中取出,它甚至不會進入我的addScore()函數。 http://pastebin.com/u4AMmSz3你能解釋我在做什麼錯了嗎? – 2013-05-08 03:52:59

+0

您需要使'addScore'函數成爲'createAddScore'函數的返回值。這樣,你可以調用'createAddScore'傳遞一個'userId',返回一個'addScore'函數,當被async調用時''userId'可用於返回的函數。在javascript中查看關於閉包和範圍的詳細信息:http://stackoverflow.com/questions/111102/how-do-javascript-closures-work http://stackoverflow.com/questions/2858340/javascript-inner-function -scope-chain – 2013-05-08 04:01:24

+0

好孩子謝謝。我意識到最初搞砸的是額外的回調,即'map'作爲第二個參數傳入......所以我在''內執行'return function(submission)'而不是'return function(submission,fn)'' createAddFunction',所以它不會異步執行,因此完成得太快。謝謝您的幫助。 :) – 2013-05-08 04:18:02