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