Javascript 使用axios和node js同步调用
我对NodeJS很陌生,我似乎有一个长期存在的问题,我还没有找到解决方案 在我的应用程序中,我使用套接字与服务器交互,使用Axios与API交互。 代码按预期运行,并按预期返回结果,但不按首选顺序返回。 这是我的奋斗 在客户机上:Javascript 使用axios和node js同步调用,javascript,node.js,socket.io,async-await,axios,Javascript,Node.js,Socket.io,Async Await,Axios,我对NodeJS很陌生,我似乎有一个长期存在的问题,我还没有找到解决方案 在我的应用程序中,我使用套接字与服务器交互,使用Axios与API交互。 代码按预期运行,并按预期返回结果,但不按首选顺序返回。 这是我的奋斗 在客户机上: function getPreviousChat(data) { socket.emit('getChat', data); } function loadChat(conversation) { socket.emit('parseMessage', co
function getPreviousChat(data) {
socket.emit('getChat', data);
}
function loadChat(conversation) {
socket.emit('parseMessage', conversation);
}
socket.on('loadChat', function(conversation) {
if (conversation) {
for(var i = 0; i < conversation.length; i++){
loadChat(conversation[i]);
}
}
});
socket.on('newMessage', function(data) {
$('div').append(data.message)
});
调用函数getPreviousChat,该函数工作正常,返回聊天信息,但不会按照保存在数据库中的顺序显示。我知道这是因为节点是异步的,在继续下一个函数调用之前不等待响应,但我想知道如何让它以有序的方式加载数据 您是否在客户端上引用了
loadChat
?您可以将socket.on('newMessage')…
放入socket.on中('loadChat'
回调,以确保它按该顺序发生。顺便说一句,其中的if
语句缺少一个结束}
,您需要使用时间戳保存消息,然后检索它,使用该时间戳对其进行排序,以便在中显示order@SunilLama当我运行console.log(对话)时检查是否(对话)后,控制台立即按正确顺序显示消息。@blex Yes我注意到结束标记和response.datag。请将答案作为一个片段发布,如果有效,我会将其标记为正确答案。您是否在客户端上引用loadChat
?您可以打开套接字('newMessage'…
在socket.on中('loadChat'
回调,以确保它按该顺序发生。顺便说一句,其中的if
语句缺少一个结束}
,您需要使用时间戳保存消息,然后检索它,使用该时间戳对其进行排序,以便在中显示order@SunilLama当我运行console.log(对话)时检查是否(对话)后,控制台立即按正确的顺序显示消息。@blex Yes我注意到结束标记和response.datag。请将答案作为一个片段发布,如果有效,我会将其标记为正确答案。
socket.on('getChat', function(data) {
axios.get(api)
.then(response => {
io.sockets.emit('loadChat', response.data);
})
.catch(error => {
console.log(error);
});
});
socket.on('parseMessage', function(data) {
axios.get(api2)
.then(response => {
io.sockets.emit('newMessage', {
msg: response.data
});
})
.catch(error => {
console.log(error);
});
});