Вы влияете на немедленное возвращаемое значение iwlist.scan()
в переменную n
. Эта функция использует классический обратный вызов nodejs для обработки асинхронного поведения, поэтому она всегда может возвращать неопределенное значение, поскольку результат переходит в обратный вызов.
Два решения:
1) Влиять на результат переменной в обратном вызове
function scan(myCallback) {
iwlist.scan({
iface : 'wlp1s0',
show_hidden : true
}, myCallback);
});
const Server = http.createServer(function(req, res){
var n;
scan(function(error, result) {
n = result;
res.write(n);
res.end();
});
});
2) Вы превращаете существующую функцию в обещание, используя Promisify [118 ]
var scanAsync = utils.promisify(iwlist.scan)
function async scan() {
// Will return the result as a promise
return scanAsync({
iface : 'wlp1s0',
show_hidden : true
});
};
try {
var n = await scan();
} catch (e) {
// Handle error
}
Реализация доступна в разделе "Исследование Beautiful Languages »блог:
« Реализация 'du -s *' в Powershell »
function directory-summary($dir=".") {
get-childitem $dir |
% { $f = $_ ;
get-childitem -r $_.FullName |
measure-object -property length -sum |
select @{Name="Name";Expression={$f}},Sum}
}
(Код владельца блога: Луис Диего Фальяс)
Вывод:
PS C:\Python25> directory-summary Name Sum ---- --- DLLs 4794012 Doc 4160038 include 382592 Lib 13752327 libs 948600 tcl 3248808 Tools 547784 LICENSE.txt 13817 NEWS.txt 88573 python.exe 24064 pythonw.exe 24576 README.txt 56691 w9xpopen.exe 4608