2017-06-20 1 views
-2

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.

+0

ich nicht den Grund des Downvote verstanden. Bitte lassen Sie mich wissen, wie ich meine Frage verbessern kann. –

+0

Hast du meine Antwort überprüft? Das müssen Sie tun. –

+1

Ja, das habe ich getan - ich habe es sehr geschätzt und es aufgewertet. –

Antwort

2

Sie können eine Reihe von Versprechen haben. Wenn der Benutzer Anmeldeinformationen für den zweiten Dienst hinzufügt, fügen Sie diese Empfehlung dem Array hinzu.

Dann verwenden Promise.all(yourPromiseArray).then((values)=>{ //All promises are resolved. Do something with the values array })

+0

Arbeitete perfekt! –

Verwandte Themen