Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用axios和node js同步调用_Javascript_Node.js_Socket.io_Async Await_Axios - Fatal编程技术网

Javascript 使用axios和node js同步调用

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

我对NodeJS很陌生,我似乎有一个长期存在的问题,我还没有找到解决方案

在我的应用程序中,我使用套接字与服务器交互,使用Axios与API交互。 代码按预期运行,并按预期返回结果,但不按首选顺序返回。 这是我的奋斗 在客户机上:

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);
      });
  });