es6 promise rejected调用顺序?


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

阅读 3.9k
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需要执行的回调函数

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

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

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

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题