2015-06-09 3 views
0

Я создаю функцию, которая проверяет пароль пользователя с помощью файла тени паролей linux. Проблема в том, что основная функция (sync) возвращается не определена до завершения внутренней функции async, и из-за этого она всегда возвращает undefined.async function in sync function dont return value

Как изменить основную функцию на асинхронный режим, чтобы она дождалась завершения функции async?

Прошу совета. Thnaks заранее

Адриан

function checkPass(a, b) { 
    "use strict"; 
    var fs = require('fs'); 
    var sha512crypt = require('sha512crypt-node'); 
    // 
    var shadow = '/tmp/shadow'; 
    var userNameCheck = a; 
    var passwordCheck = b; 
    // 
    var response; 

    fs.readFile(shadow, function (err, logData) { 
     if (err) throw err; 

     // logData is a Buffer, convert to string. 
     var shadowFile = logData.toString(); 
     var shadowList = shadowFile.split('\n'); 

     for (var line in shadowList) { 
      var userEntree = shadowList[line].split(":"); 

      if (userEntree[0] === userNameCheck) { 

       var username = userEntree[0]; 
       var fullShadow = userEntree[1]; 
       // 
       var fullShadowSplit = userEntree[1].split('$'); 
       // 
       var passwordAlgorithm = fullShadowSplit[1]; 
       var saltShadow = fullShadowSplit[2]; 
       var passwordShadow = fullShadowSplit[3]; 
       // 

       var hash = sha512crypt.sha512crypt(passwordCheck, saltShadow) 
       //console.log(hash + '===' + fullShadow); 
       if (hash === fullShadow) { 
        console.log('LOG: oldPassCorrect'); 
        //return 'oldPassCorrect'; 
        response = 'oldPassCorrect'; 
        return response; 
        break; 
       } else { 
        console.log('LOG: oldPassIncorrect'); 
        //return 'oldPassCorrect'; 
        response = 'oldPassIncorrect'; 
        return response; 
        break; 
       } 
      } 
     } 
    }); 
} 


console.log("Function response: " + checkPass('share', 'qwerty')); 
+0

Возможные дубликат: http://stackoverflow.com/q/14220321/1702990 – Sinkingpoint

+0

К сожалению, это не тот же вопрос. –

+0

Возможный дубликат [возвращает значения с помощью функции async в nodejs] (http://stackoverflow.com/questions/12554350/return-values-with-async-function-in-nodejs) –

ответ

0

добавить функцию обратного вызова к основной функции:

function checkPass(a, b, callback) { 
    "use strict"; 
    var fs = require('fs'); 
    var sha512crypt = require('sha512crypt-node'); 
    // 
    var shadow = '/tmp/shadow'; 
    var userNameCheck = a; 
    var passwordCheck = b; 
    // 
    var response; 

    fs.readFile(shadow, function (err, logData) { 
     if (err) throw err; 

     // logData is a Buffer, convert to string. 
     var shadowFile = logData.toString(); 
     var shadowList = shadowFile.split('\n'); 

     for (var line in shadowList) { 
      var userEntree = shadowList[line].split(":"); 

      if (userEntree[0] === userNameCheck) { 

       var username = userEntree[0]; 
       var fullShadow = userEntree[1]; 
       // 
       var fullShadowSplit = userEntree[1].split('$'); 
       // 
       var passwordAlgorithm = fullShadowSplit[1]; 
       var saltShadow = fullShadowSplit[2]; 
       var passwordShadow = fullShadowSplit[3]; 
       // 

       var hash = sha512crypt.sha512crypt(passwordCheck, saltShadow) 
       //console.log(hash + '===' + fullShadow); 
       if (hash === fullShadow) { 
        console.log('LOG: oldPassCorrect'); 
        response = 'oldPassCorrect'; 
        callback(response); 
        break; 
       } else { 
        console.log('LOG: oldPassIncorrect'); 
        response = 'oldPassIncorrect'; 
        callback(response); 
        break; 
       } 
      } 
     } 
    }); 
} 


checkPass('share', 'qwerty', function (response) { 
     console.log("CallBack: " + response); 
    }); 
+0

Это поможет мне: http: // stackoverflow .com/questions/18950984/return-value-from-asynchronous-function-in-nodejs –

+0

Правильно ли это? –

+0

Это не только правильный путь, это ** только ** путь. Вы можете получить немного больше фантазий с обещаниями, но это все еще основано на обратном вызове. – slebetman