Ich logge mich in zwei verschiedene Dienste und ich muss beide Antworten auf ein Array drücken. Dafür bin die Schaffung ich einen promiseResult
, und im Inneren zwei weitere Zusagen für die Anmeldungen:NodeJS: Callbacks innerhalb Versprechen
var promiseResult = new Promise(function(resolveResult, rejectResult) {
var dataAvailable = []
// first promise for the first login
var promiseFirstLogin = new Promise(function(resolve, reject) {
login.returnData(email, password, (dataFirstLogin) => {
resolve(dataFirstLogin)
})
})
promiseFirstLogin.then(function(dataFirstLogin) {
return dataFirstLogin
})
.then(function(dataFirstLogin) {
// pushing the data of the first login
dataAvailable.push({dataFirstLogin: dataFirstLogin})
return dataAvailable
})
// if the user puts the login for the second service
if (second_login_username) {
// second promise of the second login
var promiseSecondLogin = new Promise(function(resolve, reject) {
login.returnSecondData(secondUsername, secondPassword, (secondData) => {
resolve(secondData)
})
})
promiseSecondLogin.then(function(secondData) {
return secondData
})
.then(function(secondData) {
// pushing second data to the same array
dataAvailable.push({secondData: secondData})
return dataAvailable
})
}
// logs undefined (?)
console.log('->', dataAvailable);
/*
I try to resolve the array with my data, but it needs to be inside the promises.
However, as I have multiple data sources, I cannot simply put the resolve function
inside each promise. How to proceed with this?
*/
resolveResult(dataAvailable)
})
promiseResult.then(function (dataAvailable) {
// I try to get the array with my data... but unsuccessfully
return dataAvailable
})
.then(function (dataAvailable) {
dataAvailable.reduce(function(result, item) {
var key = Object.keys(item)[0]
result[key] = item[key];
res.send(JSON.stringify(result, null, 3));
}, {})
})
Wie ich in den Kommentaren schrieb, ich versuche zu resolve()
das Array mit den Daten aus den beiden Anmeldungen, aber es braucht innerhalb der Versprechen sein. Allerdings habe ich mehrere Datenquellen, und ich kann nicht einfach die resolve()
in jedes Versprechen setzen. Wie setze ich einen einzigen resolve()
, der beide Daten meiner Dienste enthält?
Jede Hilfe wird sehr geschätzt.
ich nicht den Grund des Downvote verstanden. Bitte lassen Sie mich wissen, wie ich meine Frage verbessern kann. –
Hast du meine Antwort überprüft? Das müssen Sie tun. –
Ja, das habe ich getan - ich habe es sehr geschätzt und es aufgewertet. –