javascript arrays object sails.js async.js

javascript - Usando async.js para poblar profundamente sails.js



arrays object (1)

Use .toJSON() antes de sobrescribir cualquier asociación en el modelo.
De lo contrario, la implementación predeterminada de toJSON anula cualquier cambio realizado en los datos asociados al modelo.

var userFinal = data.user.toJSON(); // Use of toJSON userFinal.trips = data.isLiked; return res.json(userFinal);

En otra nota, use JS .map o _.map en lugar de async.map ya que no hay una operación asincrónica en la función interna. De lo contrario, es posible que se enfrente a RangeError: Maximum call stack size exceeded problema del RangeError: Maximum call stack size exceeded .

Además, podría ser mejor devolver cualquier respuesta de devolución de llamada final solamente. (Elimine res.negotiate , res.badRequest del primer argumento de async.auto ). Permite hacer terminal de método de respuesta

Tengo un gran problema con mi función en sails.js (v12). Estoy tratando de obtener todo userDetail usando async (v2.3) para llenar profundamente mi información de usuario:

UserController.js:

userDetail: function (req, res) { var currentUserID = authToken.getUserIDFromToken(req); async.auto({ //Find the User user: function (cb) { User .findOne({ id: req.params.id }) .populate(''userFollowing'') .populate(''userFollower'') .populate(''trips'', { sort: ''createdAt DESC'' }) .exec(function (err, foundedUser) { if (err) { return res.negotiate(err); } if (!foundedUser) { return res.badRequest(); } // console.log(''foundedUser :'', foundedUser); cb(null, foundedUser); }); }, //Find me me: function (cb) { User .findOne({ id: currentUserID }) .populate(''myLikedTrips'') .populate(''userFollowing'') .exec(function (err, user) { var likedTripIDs = _.pluck(user.myLikedTrips, ''id''); var followingUserIDs = _.pluck(user.userFollowing, ''id''); cb(null, { likedTripIDs, followingUserIDs }); }); }, populatedTrip: [''user'', function (results, cb) { Trip.find({ id: _.pluck(results.user.trips, ''id'') }) .populate(''comments'') .populate(''likes'') .exec(function (err, tripsResults) { if (err) { return res.negotiate(err); } if (!tripsResults) { return res.badRequest(); } cb(null, _.indexBy(tripsResults, ''id'')); }); }], isLiked: [''populatedTrip'', ''me'', ''user'', function (results, cb) { var me = results.me; async.map(results.user.trips, function (trip, callback) { trip = results.populatedTrip[trip.id]; if (_.contains(me.likedTripIDs, trip.id)) { trip.hasLiked = true; } else { trip.hasLiked = false; } callback(null, trip); }, function (err, isLikedTrip) { if (err) { return res.negotiate(err); } cb(null, isLikedTrip); }); }] }, function finish(err, data) { if (err) { console.log(''err = '', err); return res.serverError(err); } var userFinal = data.user; //userFinal.trips = data.isLiked; userFinal.trips = "test"; return res.json(userFinal); } ); },

Intenté casi todo para obtener esta solución pero nada está funcionando ... Puedo obtener mi variedad de viajes (data.isLiked) pero no pude obtener mis viajes de UserFInal.

Intento establecer el valor de cadena en el userFinal.trips:

Respuesta JSON

{ "trips": [], // <-- my pb is here !! "userFollower": [ { "user": "5777fce1eeef472a1d69bafb", "follower": "57e44a8997974abc646b29ca", "id": "57efa5cf605b94666aca0f11" } ], "userFollowing": [ { "user": "57e44a8997974abc646b29ca", "follower": "5777fce1eeef472a1d69bafb", "id": "5882099b9c0c9543706d74f6" } ], "email": "[email protected]", "userName": "dany", "isPrivate": false, "bio": "Hello", "id": "5777fce1eeef472a1d69bafb" }

Pregunta

¿Cómo debo hacer para que mi matriz de viajes (isLiked) pegue en mi matriz de viajes de usuario? ¿Por qué mis resultados no son lo que espero tener?

Gracias por sus respuestas.