Ich versuche derzeit, ein Tool zu erstellen, um eine dynamische Menge an Versprechen zu verketten. Hier ist mein Code:Erstellen Sie ein leeres JavaScript-Versprechen
// NB: This is made using angular's $q, but this applies to anything else
promiseChain = function(array, passedPromise) {
let chain = $q((resolve, reject) => resolve());
for (let elem of array)
chain = chain.then(_ => passedPromise(elem));
return chain;
};
und hier ist mein Testcode:
// This returns a timeout wrapped in a promise
let testFn = function(s) {
return $timeout(function() {
console.log(s);
}, 500);
};
let promise = makePromiseChain([1,2,3,4,5,6,7,8,9], testFn);
promise.then(_ => console.log('finished'));
Dies funktioniert. Doch was ärgert mich ist die erste Zeile von promiseChain
:
$q((resolve, reject) => resolve())
Gibt es keine andere Möglichkeit, ein leeres, Selbstauflösungs Versprechen zu schaffen, oder die Kette zu beginnen? Ich fühle mich schmutzig mit diesem Code. :/
Normalerweise verwenden wir dazu 'Array.prototype.reduce()' - http://stackoverflow.com/a/25730751/3478010 –
Ihre 'passedPromise' muss eine Funktion sein, kein Versprechen, sonst' passePromise (elem) würde werfen. –