2016-05-04 11 views
1

私は現在、動的な量の約束をつなぐツールを作成しようとしています。ここに私のコードは次のとおりです。空のJavaScriptプロミスを作成する

// 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; 
}; 

、ここでは、私のテストコードは次のとおりです。

// 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')); 

これは動作します。しかし、どのような私をいらいらすることはpromiseChainの最初の行です:

$q((resolve, reject) => resolve()) 

があり、空、自己解決の約束を作成するための他の方法ではありません、またはチェーンを開始するには?私はこのコードを使って汚いと感じます。 :/

+0

私たちは通常、このために 'Array.prototype.reduce()'を使用します - http://stackoverflow.com/a/25730751/3478010 –

+0

あなたの 'passedPromise'は関数でなければならず、約束ではなく、' passedPromise(elem ) 'が投げた。 –

答えて

1

あなたは、単に$q.whenまたは$q.resolveを使用することができます。

chain = $q.resolve(); // or the alias $q.when() 

A ES6の約束の解決はそうresolve代わりのwhenを使用すると、コードを見て次の人に使いやすいかもしれません、Promise.resolve()です。

関連する問題