Ich habe ein JavaScript-Versprechen, wo ich den Wert zur Kartenfunktion, die leichter zu sehen, als das Problem mit zweiten Versprechen zu erklären, zurückgeben möchte. Ich weiß, dass ich keinen Wert innerhalb des Versprechens zurückgeben kann, aber ich frage, ob es eine bessere Lösung dafür gibt. DankWie gebe ich das Ergebnis von Versprechen zu Karte Funktion zurück
Mein Code:
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)
})
},
}
Und das Problem hier:
user.contacts = _map(user.contacts, (contact) => {
this.findById.then((user) => {
contact.user = user
})
return contact
})
Verwenden 'Promise.all' auf eine Reihe von Versprechungen. – Bergi
@Bergi könnten Sie mir ein Beispiel mit meinem Code geben. Vielen Dank –
Verwenden Sie keine lodash Karte. Verwenden Sie die Karte von wann. 'when.map (Array, yourFunction) .then (resultsArray => {/ * tada * /}' – Wainage