2016-07-28 13 views
2

Ich habe ein Array von Promise Objekte, wo ich auf die abgelehnten Promises zuordnen und filtern will.Filter abgelehnt Promises

Erwarteter Ausgang:

const promises = [ 
    failedPromise, 
    successPromise, 
    successPromise, 
]; 

const resolvedPromises = promises.map(promise => ???); 

Die resolvedPromises Variable sollte Container der Ausgang der beiden successPromise verspricht.

Wie würde ich einen solchen Algorithmus implementieren?

+0

wie sind die von der nicht ausgefallenen differenziert ausgefallen? Wie sehen die zwei Objekte aus? – jcollum

+0

Schauen Sie [hier] (http://stackoverflow.com/a/30930421/1048572). Beachten Sie, dass es unmöglich ist, den Status eines Versprechens synchron zu bestimmen. Das Beste, was Sie bekommen, ist ein Versprechen für ein Array von fulfillierten Versprechen (oder deren Ergebnissen). – Bergi

Antwort

7

Sie können Standardversprechen nicht synchron anzeigen, daher können Sie das Array nicht nach deren Auflösungsstatus filtern. Aber Sie können Promise.all verwenden, um eine Liste der aufgelösten Werte zu erhalten. Hier ist ein kleiner Trick, wie Ablehnungen zu handhaben:

const promises = [ 
 
    Promise.resolve(1), 
 
    Promise.reject(2), 
 
    Promise.resolve(3) 
 
]; 
 

 
const FAIL_TOKEN = {}; 
 

 
const resolvedPromises = Promise.all(
 
    promises.map(p => p.catch(e => FAIL_TOKEN)) 
 
).then(
 
    values => values.filter(v => v !== FAIL_TOKEN) 
 
); 
 

 
resolvedPromises.then(values => console.log(values));

+1

In ES6 würde ich sogar 'Symbol (" failed ")' verwenden anstelle eines leeren Objekts. – Bergi