Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

Promise的链式处理

  Promise实例创建之后可以链式调用出一堆thencatch,这些thencatch序列会在Promise进入首个状态后顺序处理下来,把上一个处理产生的返回值交给下一个处理。每个thencatch根据上一个处理传入的不同的状态做出响应,可能是跳过,也可能是处理。
  无论是then还是catch,他们的默认返回值都是Promise.resolve()(没有参数,接收参数时会收到undefined),当然也可以手动传入一个参数给下一个处理。
<script>
new Promise(function(resolve,reject){
  reject("你是好人"); //产生reject,参数"你是好人"
})
//接到reject,then不处理reject,跳过此段
.then(function(e){ console.log("1 then "+e); })
//接到reject,处理参数"你是好人",默认返回resolve(undefine)
.catch(function(e){ console.log("2 catch "+e); })
//接到resolve,处理参数undefine,手动返回resolve("啊?")
.then(function(e){
  console.log("3 then "+e);
  return Promise.resolve("啊?");
})
//接到resolve,catch不处理resolve,跳过此段
.catch(function(e){ console.log("4 catch "+e); })
//接到resolve,处理参数"啊?",默认返回resolve(undefine)
.then(function(e){ console.log("5 then "+e); });
</script>
  这个测试很能说明Promise实例的链式调用原理。另外要注意,这些链式调用虽然是使用返回值,但在每次处理返回之后并不是同步执行下一个处理,而是在下一个消息中执行。在这个期间可能执行计时器代码或其它事件代码。
网名:
54.144.24.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^