2016-03-05 80 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); 
});