2015-07-11 60 views
0

這是我的代碼的一部分。如何防止Node.js中的非阻塞?

var project_url; 
project_url = getProjectUrl(req,name); 

var collection = db.get('project');  
collection.insert({ 
    "id" : projectId, 
    "name" : name, 
    "url" : project_url 
}, function(err,doc){ 
    if(err){ 
     res.send("There was a problem"); 
    } 
}); 

var collection2 = db.get('project_details'); 
collection2.insert({ 
    "id" : projectId, 
    "media" : media 
}, function(err,doc){ 
    if(err){ 
     res.send("There was a problem"); 
    } 
}); 

如何使用Node.js與MongoDB中,我想插入數據數據庫後功能getProjectUrl,它返回一個字符串值,已經完成。但是,它會異步運行,以便在getProjectUrl返回值之前執行collection.insert和collection2.insert。因此,當我檢查數據庫時,project_url爲空。如何在getProjectUrl返回值後執行插入操作?

+0

您應該創建該函數返回後使用的值的回調函數。 – wmaxlees

回答

0

讓你的功能getProjectUrl有回調,例如

function getProjectUrl(req, name, callback) { 
    var result = 'foo'; // I'm not sure how you get it 

    callback(result); 
} 

然後

getProjectUrl(req, name, function(project_url) { 
    var collection = db.get('project');  
    collection.insert({ 
     "id" : projectId, 
     "name" : name, 
     "url" : project_url 
    }, function(err,doc){ 
     if(err){ 
      res.send("There was a problem"); 
     } 
    }); 

    var collection2 = db.get('project_details'); 
    collection2.insert({ 
     "id" : projectId, 
     "media" : media 
    }, function(err,doc){ 
     if(err){ 
      res.send("There was a problem"); 
     } 
    }); 
});