展开目录
Promise才是javascript的正统队列
Promisejavascriptnodejs
X
陈尼玛的博客
记录开发生涯的踩坑经历,用时间来验证成长
加载中

由于ie11不支持Promise,再加上以前没有认真地看过Promise的方法设计,所以我曾经为了解决异步回调嵌套的问题而制造了一些多余的轮子(比如nodejs异步回调的并发控制),现在看来这些东西完全可以用Promise来更好地解决,而且前人已经都解决了。。

Promise 的具体说明可以直接参考MDN上的实例代码。为了深刻的理解这些方法的使用,同时也为了能在ie上使用Promise来控制异步流程,我写了一个Promise的实现代码,用来证实我对规范中细节的理解。

理解之后对下面的Promise异步队列执行逻辑就不会感到困惑了:

var r=function(a,e){
  return new Promise(function(resolve,reject){
    setTimeout(function(){
      e?reject(e):resolve(a);
    },500);
  });
};
var s=function(a,e){
  return function(x){
    console.log(a,'=>',x);
    return r(a,e);
  };
};

console.log(' 1* 顺序队列');
Promise.reject(1).then(
  null, s(2,null)
).then(
  s(3,true), null
).then(
  null, s(4,null)
).then(function(value){
  console.log('>> completed: ',value);

  console.log(' 2* 并发队列');
  var o=[];
  for(var i=0;i<3;i++)
    for(var j=0;j<5;j++)
      o[i]=(o[i]||Promise.resolve(j)).then(s(i,null));

});

实现代码: https://www.xdelve.com/resources/js_modules/polyfill/Promise.js

相关文档

暂无

随便看看

  1. windows电脑防止自动休眠

  2. 定长消息队列读写优化

  3. css多行文本超出截断显示省略号

  4. sass变量和继承类写法

  5. raw.githubusercontent.com DNS被指向127.0.0.1

  6. css3 文字渐变色

  7. npm远程服务器某些配置不兼容代理的解决办法

  8. ios13 vpn 能连接但不能传数据问题解决

  9. heroku登陆cli

  10. npm设置仓库地址和代理

  11. cdn资源列表

  12. putty使用http代理连接服务器

  13. sendmail用nginx做代理

  14. mysql选取内容导出到文件

  15. ie8上Image.onload不触发问题

  16. youku电脑版跳过广告代码

  17. 配置mysql ssl连接

  18. 前端性能观察器

畅言模块加载中