Blame view

天文台pc/tianwentai-ui/node_modules/enhanced-resolve/lib/forEachBail.js 1.11 KB
bc518174   王天杨   提交两个项目文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
  /*
  	MIT License http://www.opensource.org/licenses/mit-license.php
  	Author Tobias Koppers @sokra
  */
  
  "use strict";
  
  /** @typedef {import("./Resolver").ResolveRequest} ResolveRequest */
  
  /**
   * @template T
   * @template Z
   * @callback Iterator
   * @param {T} item item
   * @param {(err?: null | Error, result?: null | Z) => void} callback callback
   * @param {number} i index
   * @returns {void}
   */
  
  /**
   * @template T
   * @template Z
   * @param {T[]} array array
   * @param {Iterator<T, Z>} iterator iterator
   * @param {(err?: null | Error, result?: null | Z, i?: number) => void} callback callback after all items are iterated
   * @returns {void}
   */
  module.exports = function forEachBail(array, iterator, callback) {
  	if (array.length === 0) return callback();
  
  	let i = 0;
  	const next = () => {
  		/** @type {boolean | undefined} */
  		let loop;
  		iterator(
  			array[i++],
  			(err, result) => {
  				if (err || result !== undefined || i >= array.length) {
  					return callback(err, result, i);
  				}
  				if (loop === false) while (next());
  				loop = true;
  			},
  			i,
  		);
  		if (!loop) loop = false;
  		return loop;
  	};
  	while (next());
  };