Değeri, ikinci sözle ilgili sorunu açıklamaktan daha kolay görecek şekilde haritaya döndürmek istediğiniz yere ilişkin bir javascript sözüm var. Bildiğim kadarıyla değer veremediğimi biliyorum ama bunun için daha iyi bir çözüm olup olmadığını soruyorum. TeşekkürElde ettiğim sonucu harita işlevine nasıl döndürebilirim
Kodum:
const _ = require('lodash')
Boom = require('boom'),
When = require('when'),
User = require('../../models/user');
var users;
/**
* Contact core functionality
*/
users = {
/**
* Find user by id
*
* @param {id} user id
* @returns {Promise(User)} User
*/
findById: (id) => {
if (_.isEmpty(id)) {
return When.reject(Boom.badRequest('User id missing.'))
}
return User.get(id).run().then((user) => {
if (user) {
return When.resolve(user)
}
return When.reject(Boom.notFound('No user registered with provided id.'))
}).error((error) => {
return When.reject(error)
});
},
/**
* Returns all contacts of user from database
* @returns [{Promise(Contact)}] contacts
*/
findContacts: (userId) => {
if (_.isEmpty(userId)) {
return When.reject(Boom.badRequest('User id missing.'))
}
return User.get(userId).run().then((user) => {
if (user) {
if(_.isObject(user.contacts)){
user.contacts = _.map(user.contacts, (contact) => {
this.findById.then((user) => {
contact.user = user
})
return contact
})
return When.resolve(user.contacts)
}
return When.reject(Boom.notFound('No contacts registered with provided user.'));
}
}).error((error) => {
return When.reject(error)
})
},
}
Ve burada sorunu:
user.contacts = _map(user.contacts, (contact) => {
this.findById.then((user) => {
contact.user = user
})
return contact
})
kullanın 'Promise.all'. – Bergi
@Bergi Koduma bir örnek verebilir misiniz? Çok teşekkürler –
Lodash haritasını kullanmayın. Haritanın yerini kullan. when.map (array, yourFunction) .then (resultsArray => {/ * tada * /} ' – Wainage