2016-12-20 4 views
6

Wie kann ich ein Array von Versprechen zu Promise.all hinzufügen, wenn ein Parameter zu jedem Versprechen übergeben wird?Promise.all auf Array von Versprechen mit Parameter

Zum Beispiel;

var config = { 
 
    name: [ 
 
    function(val) { 
 
     return new Promise(function(resolve, reject) { 
 
     resolve('This is ok') 
 
     }) 
 
    }, 
 
    function(val) { 
 
     return new Promise(function(resolve, reject) { 
 
     resolve('This is ok') 
 
     }) 
 
    } 
 
    ], 
 
    gender: [ 
 
    function(val) { 
 
     return new Promise(function(resolve, reject) { 
 
     resolve('This is ok') 
 
     }) 
 
    }, 
 
    function(val) { 
 
     return new Promise(function(resolve, reject) { 
 
     reject('This is NOT ok') 
 
     }) 
 
    } 
 
    ] 
 
}

Ich möchte im Wesentlichen Promise.all(config[name], ...) zu tun. Dies wird tatsächlich innerhalb einer Schleife stattfinden, so dass ich über ein Formularobjekt iterieren kann, indem ich jeden Schlüssel übergebe, um ein Array von verknüpften Versprechen zu erhalten und den Wert an jedes Versprechen weiterzugeben.

EDITFiddle, die die akzeptierte Antwort, für die Neugierigen implementiert.

+0

Ihre Geige ist tot – Rohmer

+1

@Rohmer Link aktualisiert – MindVox

Antwort

7

Verwenden Sie map, um die Funktionen aufzurufen und eine Reihe von Versprechen zurückzugeben.

Promise.all(config[name].map(callback => callback(val)) 
    .then(values => { 
     // executed when all promises resolved, 
     // values is the array of values resolved by the promises 
    }) 
    .catch(err => { 
    // catch if single promise fails to resolve 
    }); 

Sie können mehr über Promise.all here lesen.

Verwandte Themen