这两个库都不错。我发现它们有不同的用途,可以串联使用。
Q为开发人员提供了Promise对象,这些对象是价值的未来表示形式。对于时间旅行很有用。
一个尝试实施linter的示例显示了库之间的潜在统一性:
function lint(files, callback) { // Function which returns a promise. var getMerged = merger('.jslintrc'), // Result objects to invoke callback with. results = []; async.each(files, function (file, callback) { fs.exists(file, function (exists) { // Future representation of the file's contents. var contentsPromise, // Future representation of JSLINT options from .jslintrc files. optionPromise; if (!exists) { callback(); return; } contentsPromise = q.nfcall(fs.readFile, file, 'utf8'); optionPromise = getMerged(path.dirname(file)); // Parallelize IO operations. q.all([contentsPromise, optionPromise]) .spread(function (contents, option) { var success = JSLINT(contents, option), errors, fileResults; if (!success) { errors = JSLINT.data().errors; fileResults = errors.reduce(function (soFar, error) { if (error === null) { return soFar; } return soFar.concat({ file: file, error: error }); }, []); results = results.concat(fileResults); } process.nextTick(callback); }) .catch(function (error) { process.nextTick(function () { callback(error); }); }) .done(); }); }, function (error) { results = results.sort(function (a, b) { return a.file.charCodeAt(0) - b.file.charCodeAt(0); }); callback(error, results); });}
我想对每个文件做一些潜在的阻塞。因此
async.each是显而易见的选择。我可以并行化 相关的 *** 作 每一次迭代
与
q.all和它们是否适用于2个或多个文件重用我的选项值。
在此,Async和Q都会影响程序的控制流程,并且Q表示将来某个时候解析为文件内容的值。这些库可以很好地协同工作。一个人不需要“选择一个”。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)