我正在构建一个作为 node 项目开始的应用程序.我能够通过package.json
中的脚本运行我的JS,并将东西记录到终端.
我现在正在try 插入sockets.io
以将数据发送到客户端.
我希望仅在API调用完成后才向客户端发送消息(并且我正在从另一个文件导入此消息).
这是我的server.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);
}
我假设我需要一些回调函数或一个等待方法(尽管我更喜欢使用Promise),但由于我从外部导入该函数,我不确定如何使用.then()
或其他延迟方法来包装它.或者,也许有一种方法可以修改我的retrieveProjectDetails
函数.
如果您需要更多信息(html标记、控制台日志(log)等),请拨打电话.
任何帮助都是非常感激的.