我将DS18B20连接到Raspberry Pi,我尝试使用带React的NodeJS在浏览器上显示温度,我还使用SocketIO显示实时温度,因为温度总是变化的。
我有temperature.js从文件中获取温度,这是可以的。
我有app.js作为socketio的服务器,我试图调用函数,但它显示Promise{pending},然后我改成async/await,现在我可以得到温度,但在客户端是错误的。
app.js如下所示
const express = require('express');
const http = require('http');
const socketIO = require('socket.io');
const port = 4001;
const index = require('./routes/index');
const getTemperature = require('./utils/temperature');
const app = express();
app.use(index);
const server = http.createServer(app);
const io = socketIO(server);
let interval;
io.on("connection", (socket) => {
console.log("New client connected");
if(interval) {
clearInterval(interval);
}
interval = setInterval(() => getApiAndEmit(socket), 1000);
socket.on("disconnect", () => {
console.log("Client disconnected");
clearInterval(interval);
});
});
async function broadcast() {
var temp = await getTemperature();
return temp;
}
var temperature = broadcast();
const getApiAndEmit = socket => {
const response = temperature;
console.log(response);
socket.emit("FromAPI", response);
};
server.listen(port, () => console.log(`Listening on port ${port}`));
来自客户端的错误=“Objects is not valid as a React子级(Found:object with keys{})”
下面是console.log结果
Promise { 29.062 }
Promise { 29.062 }
Promise { 29.062 }
Promise { 29.062 }
如何从Promise{data}中获取数据???
可以试试这个:
广播()。then(t=>{console.log(t);});