Esta es una de esas situaciones en las que es un poco complicado explicar el problema, pero haré todo lo posible para explicarlo para poder obtener ayuda aquí.
Básicamente, tengo un proyecto que necesito para permitir que los usuarios inicien sesión/cierren sesión, incluso si no tienen conexión a Internet.
Cada vez que inician sesión/cierran sesión mientras están desconectados, almaceno 2 matrices y las empujo para poder iniciar/cerrar sesión según la hora en que iniciaron/cerraron sesión.
Las matrices se ven así:
var logins = [{"id":1,"dateAdded":"2021-10-29T18:27:35.754Z"}, {"id":2,"dateAdded":"2021-10-29T18:28:35.754Z"}, {"id":3,"dateAdded":"2021-10-30T18:28:35.754Z"}]; var logouts = [{"id":1,"dateAdded":"2021-10-29T18:27:50.754Z"}, {"id":2,"dateAdded":"2021-10-29T19:28:35.754Z"}]; Para explicar las matrices, la identificación es la id de la cuenta en la que iniciaron/cerraron sesión . la dateAdded es básicamente la fecha y hora en que iniciaron/cerraron sesión .
Ahora, el problema: cuando ejecuto mi código AJAX en el siguiente código/moda, funciona bien PERO todo se ejecuta al mismo tiempo, lo que inunda el sistema de inicio/cierre de sesión y, por lo tanto, no iniciará ni cerrará la sesión del cuenta(s).
for(let dataSings of logins){ //do my ajax stuff here } for(let dataSingo of logouts){ //do my ajax stuff here }Lo que debo hacer es encontrar una buena solución para buscar en estas matrices, y luego iniciar sesión y luego buscar en las matrices el cierre de sesión con la misma identificación y cerrar sesión nuevamente y así sucesivamente. ..
y todo esto se ha basado en el tiempo que está almacenado en el Array ( dateAdded) .
Espero haber explicado esto lo suficientemente bien como para arrojar algo de luz al respecto.
Para responder a su pregunta (aunque creo que el enfoque es defectuoso)
Debe tener una matriz que contenga todas las acciones y para cada acción almacenar la información de qué tipo es.
Y para esperar el envío de cada solicitud, puede usar await y async .
let actions = [{ "type": "login", "id": 1, "dateAdded": "2021-10-29T18:27:35.754Z" }, { "type": "login", "id": 2, "dateAdded": "2021-10-29T18:28:35.754Z" }, { "type": "login", "id": 3, "dateAdded": "2021-10-30T18:28:35.754Z" }, { "type": "logout", "id": 1, "dateAdded": "2021-10-29T18:27:50.754Z" }, { "type": "logout", "id": 2, "dateAdded": "2021-10-29T19:28:35.754Z" } ] async function run() { // sort the array actions.sort(function(a, b) { return new Date(b.dateAdded) - new Date(a.dateAdded); }); for (let action of actions) { if (action.type === 'login') { await fetch('/login', { method: "POST" // body: data }) } else if (action.type === 'logout') { await fetch('/logout', { method: "POST" // body: data }) } } } run(); Si realmente desea tener dos matrices, puede fusionarlas y, antes de eso, agregar el type a los elementos. (tenga en cuenta que estos elementos en el inicio de login y el cierre de logout son los mismos que en merged )
var logins = [{ "id": 1, "dateAdded": "2021-10-29T18:27:35.754Z" }, { "id": 2, "dateAdded": "2021-10-29T18:28:35.754Z" }, { "id": 3, "dateAdded": "2021-10-30T18:28:35.754Z" }]; var logouts = [{ "id": 1, "dateAdded": "2021-10-29T18:27:50.754Z" }, { "id": 2, "dateAdded": "2021-10-29T19:28:35.754Z" }]; let merged = [ ...logins.map(item => { item.type = 'login' return item }), ...logouts.map(item => { item.type = 'logout' return item }) ] console.dir(merged)