2015-05-19 72 views
-1

試圖使函數isNameInDbId查看名稱是否在mongoDB的列表中。我想我(可能?)需要一個關閉,但我不能得到它的工作,它目前出錯。如果我不使用閉包,則函數回調不知道變量name,或者我可以用不同的方式來完成此操作。我嘗試了幾種方法。javascript中的回調不起作用

代碼:

var name = "john"; 
var dbID = 123123123; 
isNameInDbId(name, dbID, function (success) { 
    if(success) { 
     // log("[INFO] name is in list"); 
    return; 
    } 
}); 

功能:

function isNameInDbId(name, dbID, callback) { 
    user_collection.findOne({_id : dbID}, (function(err, doc) { 
     var names = []; 
     var success = false; 
     if(doc) { 
      names = doc.names; 
      if(names.indexOf(name)) 
       success = true; 
     } 
     callback(success); 
    })(name); 
} 
+1

那'(名稱)'看起來錯誤的,應該被忽略。 – Bergi

回答

0

正如BERGI說,那(name)看起來是錯誤的。

function isNameInDbId(name, dbID, callback) { 
 
    user_collection.findOne({_id : dbID}, (function(err, doc) { 
 
     var names = []; 
 
     var success = false; 
 
     if(doc) { 
 
      names = doc.names; 
 
      if(names.indexOf(name)) 
 
       success = true; 
 
     } 
 
     callback(success); 
 
    }); 
 
}

+0

啊,一定是深夜。乾杯 – ChrisAdmin

0

遺憾的是深夜,我不得不a.indexOf(b)ab周圍走錯了路,這促使一個不尋常的錯誤說name是身份不明的 - 所以我想我可能需要關閉。 刪除關閉和脫困indexOf給出正確的代碼如下:

function isNameInDbId(name, dbID, callback) { 
    user_collection.findOne({_id : dbID}, function(err, doc) { 
     var names = []; 
     var success = false; 
     if(doc) { 
      names = doc.names; 
      if(name.indexOf(names)) 
       success = true; 
     } 
     callback(success); 
    }); 
}