javascript - es6 promise rejected调用顺序?
PHP中文网
PHP中文网 2017-04-11 09:50:44
[JavaScript讨论组]

function test(src){
  return new Promise((success, fail)=>{
    if(src == 1){
      success(src);
    }else if(src === 2){
      fail(src);
    }
  });
}

var a = test(2);

a.then((src)=>{
  console.log('success');
}, (src)=>{
  console.log('fail');
}).then(()=>{
  console.log(111)
},()=>{
  console.log(222)
}).then(()=>{
  console.log(333)
},()=>{
  console.log(444)
})

输出结果:
"fail"
111
333

为什么不是:
"fail"
222
444

按照我的理解:
var a = test(2);
返回的Promise对象调用rejected函数,此时传递给第一个then的promise状态应该是rejected, 但是为什么调用的是resolved函数?

thx

PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(4)
大家讲道理
function test(src){
  return new Promise((success, fail)=>{
    if(src == 1){
      success(src);
    }else if(src === 2){
      fail(src);
    }
  });
}

var a = test(2);

a.then((src)=>{
  console.log('success');
}, (src)=>{
  console.log('fail');
  return Promise.reject();
}).then((src)=>{
  console.log(src)
},(err)=>{
  console.log(222)
  return Promise.reject();
}).then(()=>{
  console.log(333)
},()=>{
  console.log(444)
})

可以通过设置当前then返回的promise的状态来决定下一个then需要执行的回调函数
PHP中文网

如果顺序乱了,要promise有什么用

天蓬老师

then返回的也是一个promise对象,若promise什么都没做的话,会默认执行它的resolve函数

伊谢尔伦

then的第二个参数一用来捕获错误的,解决了就不抛到下一个then,没解决就要手动把错误继续抛下去.

简单点就就相当于catch,你不在catch里面不抛错误,那默认就表示不用解决,错误没有了.

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号