我正在构建一个应用程序,它最初是一个节点项目。我可以通过package.json
中的脚本运行我的JS,并将内容记录到终端。
我现在尝试插入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}`));
字符串
我的client.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);
});
型
index.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方法(尽管我更喜欢使用promise),但是由于我从外部导入函数,我不确定如何使用.then()
或其他延迟方法 Package 它。或者也许有一种方法可以修改我的retrieveProjectDetails
函数。
如果你需要更多的信息(html标记,控制台日志等)只是喊。
任何帮助都非常感谢。
1条答案
按热度按时间xxe27gdn1#
尝试从
retrieveProjectDetails
返回getProject
,这样它就返回一个promise:字符串
然后先调用它,然后从回调中发出数据:
型