Node.js异步库比较-Q与异步

Node.js异步库比较-Q与异步,第1张

Node.js异步库比较-Q与异步

这两个库都不错。我发现它们有不同的用途,可以串联使用。

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表示将来某个时候解析为文件内容的值。这些库可以很好地协同工作。一个人不需要“选择一个”。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5127128.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-17
下一篇 2022-11-17

发表评论

登录后才能评论

评论列表(0条)

保存