提问人:lharby 提问时间:11/9/2023 更新时间:11/9/2023 访问量:50
socket.io API 请求信息,但在向客户端发送数据之前等待响应
socket.io request information from API but wait for response before emitting data to client
问:
我正在构建一个从节点项目开始的应用程序。我能够通过脚本运行我的 JS,并将内容记录到终端。package.json
我现在正在尝试插入以将数据发送到客户端。sockets.io
我只想在我的 api 调用完成后向客户端发出一条消息(我正在从另一个文件导入它)。
这是我的服务器.js
import { retrieveProjectDetails } from '../index.js';
io.on('connection', (socket) => {
console.log('server: a user connected');
socket.on('getProjectDetails', (data) => {
console.log('server: getProjectDetails: ' + data);
io.emit('sendProjectDetails', (responseData) => {
responseData = retrieveProjectDetails(); // This is emitting before the API call has been received.
console.log(`server: data: ${responseData}`);
});
});
socket.on('disconnect', () => {
console.log('server: user disconnected');
});
});
app.listen(PORT, () => console.log(`Listening on: ${PORT}`));
我的客户端.js
const getProjectDetails = document.querySelector('.getProjectDetails');
const details = document.querySelector('.details');
getProjectDetails.addEventListener('click', (event) => {
const target = new Date();
socket.emit('getProjectDetails', target);
});
socket.on('sendProjectDetails', (data) => {
details.textContent = JSON.stringify('received' + data, null, 4);
console.log('client: sendProjectDetails was sent from the server');
console.log(data);
});
索引.js(在根目录中)
const getProject = () => {
return apiRoot.get().execute();
};
// Retrieve Project information and output the result to the log
const retrieveProjectDetails = (data) => {
getProject()
.then(response => {
data = response;
console.log(data);
return data;
})
.catch(console.error);
}
我假设我需要一些回调函数或 await 方法(尽管我更喜欢使用 promises),但是当我在外部导入函数时,我不确定如何使用或其他一些延迟方法包装它。或者也许有一种方法可以修改我的函数。.then()
retrieveProjectDetails
如果您需要更多信息(html 标记、控制台日志等),只需大声呵斥即可。
任何帮助都非常感谢。
答:
1赞
traynor
11/9/2023
#1
尝试从 return from ,以便返回一个 promise:getProject
retrieveProjectDetails
const retrieveProjectDetails = (data) => {
return getProject()
.then(response => {
//...
然后先调用它,然后从回调中发出数据:
socket.on('getProjectDetails', (data) => {
console.log('server: getProjectDetails: ' + data);
retrieveProjectDetails(data).then(responseData => {
console.log(`server: data: ${responseData}`);
io.emit('sendProjectDetails', responseData);
});
});
评论
0赞
lharby
11/9/2023
是的!非常感谢,我真的很感激。
评论