2016-05-07 22 views
0

我有以下功能:如何等待Node.js中的函数执行?

isUserUsed: function(username) { 
    var result = true; 
    User.getUserByUsername(username, function(err, user){ 
    if(err) throw err; 
    if(user){ 
     result = false; 
    } 
}); 
    return result; 
}, 

被调用的函数User.getUserByUsername()应该改变价值result。但是,主要功能isUserUsedUser.getUserByUsername()完成之前返回。如何在继续之前控制代码的流程以等待User.getUserByUsername()完成?

谢谢!

+0

承诺。 Checkout Bluebird(http://bluebirdjs.com/docs/getting-started.html) – Wainage

+0

'if(err)throw err;'在异步回调中是node.js中最糟糕的设计模式之一。不要这样做 - 永远。 – jfriend00

回答

0

也许诺言是你的选择,点击链接[promise]了解详情; 使用的承诺后,你的代码想:

isUserUsed: function(username) { 
 
    return new Promise((resolve, reject) => { 
 
    var result = true; 
 
    User.getUserByUsername(username, function(err, user){ 
 
     if(err) reject(err); 
 
     if(user){ 
 
     resolve(false); 
 
     } 
 
    }); 
 
    }); 
 
    
 
},