[英]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.