2016-03-05 131 views
0

任何人都可以解釋爲什麼下面的回調永遠不會被調用嗎?Node.js MongoDB collection.update()回調從未調用過

通過回調工作的更新永遠不會被調用。我錯過了什麼 ?

collection.update({_id:partner._id}, 
        {$set: { 
          groups: newGroups 
          } 
        }, 
        { upsert: false, w: 1 }, 
        function(err, status){ 
         console.log("update callback "); 
         if (err){ 
         console.log("Error updating "+err.message); 
         callback(false); 
         } else { 
         console.log("Record updated as "+JSON.stringify(status)); 
         callback(true); 
         } 
        } 
); 
+1

我想,也許你可能會談論'回調的外部環境()'你是不是顯示它必須在包裝此調用引用功能這裏。通常情況下,預期的簽名是'function(err,content)',其中'err'是一些或'null'而不是你正在返回的'true/false'值。通過給出完整的通話環境,您可以更好地解釋。 –

回答

0

你可以在一個函數回調的PARAM包裝:如果你想了解回調函數

yourFunctionName(params, function(result) { 
    //Do anything with the result 
}); 

//Except for callback as a parameter, every parameter is not compulsory 
    function yourFunctionName(id, newGroups, callback) { 
     collection.update({ 
      _id: partner._id 
     }, { 
      $set: { 
      groups: newGroups 
      } 
     }, { 
      upsert: false, 
      w: 1 
     }, 
     function(err, status) { 
      console.log("update callback "); 
      if (err) { 
      console.log("Error updating " + err.message); 
      callback(false); 
      } else { 
      console.log("Record updated as " + JSON.stringify(status)); 
      callback(true); 
      } 
     } 
    ) 
    } 

然後調用這樣的功能工作,this可能會幫助你。

-1

例如,在節點(sailsJs)

Model.update({id:'xxxxxxxxxxxxxxxx'},{name:'Flynn'}).exec(function afterwards(err, updated){ 

if (err) { 
//handle error here! 
return; 
} 

console.log('Updated user to have name ' + updated[0].name); 
});