NodeJS 基于 Promise (Q) 并发异步任务处理及重试的简单封装

可能这个用得最多的还是在采集上, 不过想着还是做成一个一般化的封装, 这样未来有需要的时候可以方便地用上.

github https://github.com/vilic/promise-pool

npm install promise-pool

例子 (TypeScript)
更新了下, 去掉了 processor return false 表示失败这个设定. 另外封装了一下 Q 的 retry, 见
https://github.com/vilic/q-retry.

import Q = require('q');
import promisePool = require('promise-pool');
var pool = new promisePool.Pool<number>((taskDataId, index) => {
 if (Math.random() < 0.1) {
 throw new Error('err 1');
 }
 return Q.delay(Math.floor(Math.random() * 5000)).then(function () {
 if (Math.random() < 0.1) {
 throw new Error('err 2');
 }
 if (index == 40) {
 console.log('pausing...');
 pool.pause().then(function () {
 console.log('paused.');
 }).delay(5000).then(function () {
 console.log('resuming...');
 pool.resume();
 });
 }
 });
}, 20);
pool.retries = 5;
for (var i = 0; i < 100; i++) {
 pool.add(i);
}
pool.start(progress => {
 if (progress.success) {
 console.log(progress.fulfilled + '/' + progress.total);
 }
 else {
 console.log(
 'task ' + progress.index + ' failed with ' +
 (progress.error ? progress.error.message : 'no error') + ', ' +
 progress.retries + ' retries left.'
 );
 }
}).then(result => {
 console.log('completed ' + result.total + ' tasks.');
});

另外现在开始用 TypeScript 写自己的项目, 感觉还不错, 常用的库都能找到 NuGet 管理的 .d.ts 文件. 不知道大家怎么看 TypeScript?

w3ctech微信

扫码关注w3ctech微信公众号

共收到3条回复

  • typescript dart coffeescript 三大js变种。。 国外coffeescript 比较多。。dart和typescript全是静态类型的 各有利弊 typescript 有 c#的影子 毕竟是delphi和c#他爹弄的嘛 。。语法最简短coffeescript

    回复此楼
  • 嗯, 之前也看了下 dart, 不过不大喜欢. 用 typescript 的原因主要还是静态类型, 有类型检查比较方便, 能避免一些错误, 智能提示也要好一些 (虽然 Visual Studio 的 JS 提示也很不错). coffeescript 跟 typescript 或者 dart 的类型感觉会有些不一样咯~ 感觉主要是改变了风格, 加了一些糖.

    回复此楼
  • 不懂技术,来看看有没有找nodejs工作的

    回复此楼

AltStyle によって変換されたページ (->オリジナル) /