带有温度传感器的 SocketIO - 我几乎在我的 Raspberry Pi 上使用 NodeJS 和 SocketIO 完成了 DS18B20,如何提取 Promise data ?

Posted

技术标签:

【中文标题】带有温度传感器的 SocketIO - 我几乎在我的 Raspberry Pi 上使用 NodeJS 和 SocketIO 完成了 DS18B20,如何提取 Promise data ?【英文标题】:SocketIO with Temp Sensor - I almost done DS18B20 on my Raspberry Pi with NodeJS and SocketIO, how can I extract Promise data ?带有温度传感器的 SocketIO - 我几乎在我的 Raspberry Pi 上使用 NodeJS 和 SocketIO 完成了 DS18B20,如何提取 Promise data ? 【发布时间】:2020-06-23 14:10:42 【问题描述】:

我将 DS18B20 连接到 Raspberry Pi 并尝试使用 NodeJS 和 React 在浏览器上显示温度,我还使用 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`));

来自客户端的错误 =“对象作为 React 子对象无效(找到:带有键 的对象)”

下面是console.log结果

Promise  29.062 
Promise  29.062 
Promise  29.062 
Promise  29.062 

如何从 Promise data 中获取数据???

【问题讨论】:

【参考方案1】:

可以试试这个:


broadcast().then(t => console.log(t); );

【讨论】:

谢谢@ta4h1r 我猜对了,但是来自console.log(response);显示承诺未定义 然后您可以更改广播()函数中返回的内容。像这样尝试: function broadcast() return new Promise (async (resolve) => temp = await getTemperature(); resolve(temp); ); broadcast.then(t => console.log(t);) 如果我不需要console.log(t),语法是什么?非常感谢!!!! 我从客户端收到此错误 -> “对象作为 React 子对象无效(找到:带有键 的对象)。如果您要渲染子对象集合,请改用数组。 " 您需要在您拥有已解决的承诺值的位置执行您的 socket.emit。我想说最简单的方法是返回一个新的承诺,它在你的 getTemperature() 函数中解析为所需的温度值。

以上是关于带有温度传感器的 SocketIO - 我几乎在我的 Raspberry Pi 上使用 NodeJS 和 SocketIO 完成了 DS18B20,如何提取 Promise data ?的主要内容,如果未能解决你的问题,请参考以下文章

使用javascript和socket.io从串口显示多个传感器数据

如何用stm32检测温度

如何用stm32检测温度

基于12C总线接口的智能温度传感器TMPl01

向核心蓝牙框架 Xcode 发送数据

树莓派交替显示cpu温度与室温