|
2 | 2 | 'use strict'; |
3 | 3 |
|
4 | 4 | var Q = require('q'), |
5 | | - qfs = require('q-fs'), |
| 5 | + qfs = require('q-io/fs'), |
6 | 6 | converter = require('./converter.js'), |
7 | 7 | util = require('./util.js'), |
8 | 8 | closureI18nExtractor = require('./closureI18nExtractor.js'), |
@@ -47,24 +47,40 @@ function extractPlurals() { |
47 | 47 |
|
48 | 48 | function writeLocaleFiles() { |
49 | 49 | console.log('Final stage: Writing angular locale files to directory: %j', NG_LOCALE_DIR); |
50 | | - var writePromises = []; |
| 50 | + var result = Q.defer(); |
51 | 51 | var localeIds = Object.keys(localeInfo); |
52 | 52 | var num_files = 0; |
53 | | - localeIds.forEach(function(localeID) { |
| 53 | + |
| 54 | + console.log('Generated %j locale files.', localeIds.length); |
| 55 | + loop(); |
| 56 | + return result.promise; |
| 57 | + |
| 58 | + // Need to use a loop and not write the files in parallel, |
| 59 | + // as otherwise we will get the error EMFILE, which means |
| 60 | + // we have too many open files. |
| 61 | + function loop() { |
| 62 | + var nextPromise; |
| 63 | + if (localeIds.length) { |
| 64 | + nextPromise = process(localeIds.pop()) || Q.when(); |
| 65 | + nextPromise.then(loop, result.reject); |
| 66 | + } else { |
| 67 | + result.resolve(num_files); |
| 68 | + } |
| 69 | + } |
| 70 | + |
| 71 | + function process(localeID) { |
54 | 72 | var content = closureI18nExtractor.outputLocale(localeInfo, localeID); |
55 | 73 | if (!content) return; |
56 | 74 | var correctedLocaleId = closureI18nExtractor.correctedLocaleId(localeID); |
57 | 75 | var filename = NG_LOCALE_DIR + 'angular-locale_' + correctedLocaleId + '.js' |
58 | | - writePromises.push( |
59 | | - qfs.write(filename, content) |
60 | | - .then(function () { |
61 | | - console.log('Wrote ' + filename); |
62 | | - ++num_files; |
63 | | - })); |
64 | 76 | console.log('Writing ' + filename); |
65 | | - }); |
66 | | - console.log('Generated %j locale files.', localeIds.length); |
67 | | - return Q.all(writePromises).then(function() { return num_files }); |
| 77 | + return qfs.write(filename, content) |
| 78 | + .then(function () { |
| 79 | + console.log('Wrote ' + filename); |
| 80 | + ++num_files; |
| 81 | + }); |
| 82 | + } |
| 83 | + |
68 | 84 | } |
69 | 85 |
|
70 | 86 | /** |
|
0 commit comments