2016-05-07 4 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. Однако основная функция isUserUsed возвращается до User.getUserByUsername() отделки. Как я могу управлять потоком кода, чтобы дождаться окончания User.getUserByUsername(), прежде чем продолжить?

Спасибо!

+0

Promises. 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); 
 
     } 
 
    }); 
 
    }); 
 
    
 
},

Смежные вопросы