簡體   English   中英

同步功能內部的異步功能不返回值

[英]async function inside sync function dont return value

我正在建立一個功能,該功能使用linux密碼影子文件檢查用戶密碼。 問題在於,主(同步)函數在內部異步函數完成之前返回未定義,因此,它總是返回未定義。

如何將main函數更改為async,以便它將等待async函數完成?

請指教。 提前致意

阿德里安

  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'));

我在主函數中添加了一個回調:

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);
    });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM