2017-02-07 5 views
0

ich verschachtelte Versprechen Struktur wie folgt bezeichnet:Schreiben Mokka Test für verschachtelte Versprechen ruft

validateUser() 
.then(() => { 
    getUserInformation() 
    .then((userInformation) => { 
    Promise.all([ 
     getUserDebitAccounts(userInformation), 
     getUserCreditAccounts(userInformation) 
    ]) 
    .then(([drAcc, crAcc]) => { 
     //do something 
    }) 
    }) 
}) 
.catch(error => { 
    callback(error); 
}); 

Zunächst einmal ist es eine Möglichkeit, diese verschachtelt Anrufe zu vereinfachen? Wie Sie sehen können, sind sie Struktur nach Abhängigkeit. Also das ist eine sehr logische Art und Weise, auf die ich gekommen bin.

Zweitens kann ich am Ende catch verwenden, um alle Ausschussteile auf allen oben genannten Anruf zu fangen. Muss ich separate catch für jeden Anruf hinzufügen?

Drittens möchte ich einen Mokka-Test schreiben, welche Stufe des Promise-Spottes ich für diese Methoden tun muss, einige Umrisse werden hilfreich sein.

Irgendwelche Vorschläge?

+1

Sie Ihre Versprechen Kette abflachen kann das Versprechen durch Rücksendung finden Sie hier: http://www.datchley.name/promise-patterns-anti-patterns/ –

Antwort

0

Ja, you can and should flatten your chain. Dazu müssen Sie return the inner promises aus den then Callbacks, die Sie sowieso benötigen, um die einzelnen catch am Ende arbeiten zu müssen.

return validateUser() 
.then(getUserInformation) 
.then(userInformation => 
    Promise.all([ 
    getUserDebitAccounts(userInformation), 
    getUserCreditAccounts(userInformation) 
    ]) 
).then(([drAcc, crAcc]) => { 
    // do something 
    return …; 
}) 
.catch(error => { 
    console.error(error); 
}); 
+0

scheint, wie wir in der ersten zwei Anrufe kombinieren ' .all' wie sie unabhängig sind. Ich möchte nur überprüfen, ob 'Promise.all ([validateUser(), getUserInformation()]). Then (([, userInformation]) => {...}). Then (..). Catch (..)' wird der richtige Weg sein, Anrufe auch zu stellen. –

+0

Ja, das können Sie tun * wenn * sie unabhängig sind. Es sieht jedoch so aus, als würden Sie einen Benutzer validieren wollen, bevor Sie Informationen darüber erhalten. (Wenn das der Fall wäre, würde ich empfehlen, sich nicht auf Nebenwirkungen zu verlassen, sondern explizit ein 'validatedUser'-Objekt zwischen ihnen zu übergeben) – Bergi

+0

Müssen wir bei den ersten beiden' then'-Aufrufen eine Rückgabe hinzufügen - –