node js异步写入变量,它像wifi网络一样随机更新
node js async writting from variable which is randomly updating like wifi networks
我想在网页上显示我周围的wifi网络。
但是由于node js的异步特性。我得到未定义的值,因为它在扫描完成之前返回值。
我正在使用
1.节点'wireless-tools'包
2. node js默认自带的http server模块
这是我的代码:
function scan() {
iwlist.scan({
iface : 'wlp1s0',
show_hidden : true
},
function(err, networks) {
return networks;
}
});
}
const http = require('http');
const hport = 8080;
const haddr = "localhost";
const Server = http.createServer(function(req, res){
var n = scan();
res.write(n);
res.end();
});
Server.listen(hport, haddr, () => {
console.log('Server running at ' + haddr + ' ' + hport);
});
页面上显示我未定义。
请使用async/await与it.I一起工作code.Please检查代码。
function scan() {
return new Promise((resolve, reject) => {
iwlist.scan({
iface: 'wlp1s0',
show_hidden: true
},
function (err, networks) {
if (err) {
return reject(err);
}
return resolve(networks);
}
);
});
}
const http = require('http');
const hport = 8080;
const haddr = "localhost";
const Server = http.createServer(async (req, res) => {
try {
var n = await scan();
res.write(n);
res.end();
}
catch (error) {
res.write(error);
}
});
您正在影响 iwlist.scan()
的直接 return 值到 n
变量中。此函数使用经典的 nodejs 回调来处理异步行为,因此它可能始终 return 未定义,因为结果将进入回调。
两种解决方案:
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
将现有函数转换为 promise
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
}
我想在网页上显示我周围的wifi网络。 但是由于node js的异步特性。我得到未定义的值,因为它在扫描完成之前返回值。
我正在使用 1.节点'wireless-tools'包 2. node js默认自带的http server模块
这是我的代码:
function scan() {
iwlist.scan({
iface : 'wlp1s0',
show_hidden : true
},
function(err, networks) {
return networks;
}
});
}
const http = require('http');
const hport = 8080;
const haddr = "localhost";
const Server = http.createServer(function(req, res){
var n = scan();
res.write(n);
res.end();
});
Server.listen(hport, haddr, () => {
console.log('Server running at ' + haddr + ' ' + hport);
});
页面上显示我未定义。
请使用async/await与it.I一起工作code.Please检查代码。
function scan() {
return new Promise((resolve, reject) => {
iwlist.scan({
iface: 'wlp1s0',
show_hidden: true
},
function (err, networks) {
if (err) {
return reject(err);
}
return resolve(networks);
}
);
});
}
const http = require('http');
const hport = 8080;
const haddr = "localhost";
const Server = http.createServer(async (req, res) => {
try {
var n = await scan();
res.write(n);
res.end();
}
catch (error) {
res.write(error);
}
});
您正在影响 iwlist.scan()
的直接 return 值到 n
变量中。此函数使用经典的 nodejs 回调来处理异步行为,因此它可能始终 return 未定义,因为结果将进入回调。
两种解决方案:
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
将现有函数转换为 promisevar 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
}