when.map
関数を使用してデータを処理したいと考えています。データが処理された後、いくつかのクリーンアップを行う必要があります (たとえば、現在使用されているデータベース接続を解放して接続プールに戻します)。
catch
andfinally
を使用する私のアプローチの問題はfinally
、最初のマッピングが発生したときに呼び出され、reject
他のマッピングがまだ進行中であることです。
では、保存のクリーンアップを実行できるように、すべてのマッピングの約束が完了するまで待つにはどうすればよいでしょうか。
require('when/monitor/console');
var when = require('when');
function testMapper(value) {
console.log('testMapper called with: '+value);
return when.promise(function(resolve, reject) {
setTimeout(function() {
console.log('reject: '+value);
reject(new Error('error: '+value));
},100*value);
});
}
when.map([1,2,3,4],testMapper)
.then(function() {
console.log('finished')
})
.catch(function(e) {
console.log(e);
})
.finally(function() {
console.log('finally')
});
出力
testMapper called with: 1
testMapper called with: 2
testMapper called with: 3
testMapper called with: 4
reject: 1
[Error: error: 1]
finally
reject: 2
[promises] Unhandled rejections: 1
Error: error: 2
at null._onTimeout (index.js:9:14)
reject: 3
[promises] Unhandled rejections: 2
Error: error: 2
at null._onTimeout (index.js:9:14)
Error: error: 3
at null._onTimeout (index.js:9:14)
reject: 4
[promises] Unhandled rejections: 3
Error: error: 2
at null._onTimeout (index.js:9:14)
Error: error: 3
at null._onTimeout (index.js:9:14)
Error: error: 4
at null._onTimeout (index.js:9:14)
環境情報:
- whenjs: v3.1.0
- ノード: v0.10.26