本章节分享一段代码,是由promise.js实现的nodejs的promises库,希望能够给需要的朋友带来帮助。

promise是由javascript实现的轻量级的框架,此框架可以让编程人员从纷乱复杂的异步回调中抽出精力来,集中于业务逻辑方面的工作。但是在默认状态下,promise.js并不能够直接用于node.js,下面就是将其进行封装整合一下,将其实现为node.js下的一个框架。

代码如下:
   [ 其他 ] 运行代码    下载代码
<script>
(function(){
var Promise = exports.Promise = function(){
  this._callbacks = [];
};
  
Promise.prototype.then = function(func, context){
  //处理回调结果的方法
  function doCallbackResults(r) {
    if (r instanceof Promise) {
      r.then(function(err, values){
        p.done(err, values);
      });
    } else {
      p.done(null, r);
    }
  }
  
  var p = new Promise();
  if (this._isdone) {
    var results = func.apply(context, this.results);
    doCallbackResults(results);
  } else {
    this._callbacks.push(function(){
      var results = func.apply(context, arguments);
      doCallbackResults(results);
    });
  }
  return p;
};
  
Promise.prototype.done = function(){
  this.results = arguments;
  this._isdone = true;
  for (var i=0; i<this._callbacks.length; i++) {
    this._callbacks[i].apply(null, arguments);
  }
  this._callbacks = [];
};
  
Promise.join = function(promises){
  var p = new Promise();
  var results = [];
  
  if (!promises || !promises.length) {
    p.done(results);
    return p;
  }
  
  var numdone = 0;
  var total = promises.length;
  
  function notifier(i) {
    return function() {
      numdone += 1;
      results[i] = Array.prototype.slice.call(arguments);
      if (numdone === total) {
        p.done(results);
      }
    };
  }
  
  for (var i = 0; i < total; i++) {
    promises[i].then(notifier(i));
  }
  
  return p;
};
  
Promise.chain = function(funcs, args) {
  var p = new Promise();
  if (!funcs || !funcs.length) {
    p.done.apply(p, args);
  } else {
    funcs[0].apply(null, args).then(function(){
      funcs.splice(0, 1);
      Promise.chain(funcs, arguments).then(function(){
        p.done.apply(p, arguments);
      });
    });
  }
  return p;
};
})();
</script>

代码描述:promise.js实现nodejs promises库。promise.js实现nodejs promises库简单介绍



107 143



用户评论
大牛,别默默的看了,快登录帮我点评一下吧!:)      登录 | 注册



×
×
51前端

注册

×
绑定手机

请绑定手机号,在继续操作

×
单次下载支付

应付金额:279

支付完成后,回到下载页面,在进行下载

官方QQ群
意见反馈
qq群

扫描上面二维码加微信群

官方QQ群

jQuery/js讨论群
群号:642649996
Css3+Html5讨论群
群号:322131262

加群请备注:从官网了解到