Promise在then中有条件判断,并返回不同的Promise对象,如何在下一个then中判断来自于哪个条件?

let p1 = ()=>{
    data = xxxx  // xxx 是从数据库获取的一个值  true 或 false
    return new Promise((res,rej)=>{
        res(data)
    })
}

// p2 p3 都是promise
let p2 = ....

let p3 = ....

// 执行
p1()
.then(
    (data)=>{
        if (data) {
            return p2
        } else {
            return p3
        }
    }
)
.then(
    // 如何去判断是 p2 的resolve,还是 p3 的 resolve
)
阅读 3.7k
2 个回答

要判断是p2的resolve,还是p3的resolve,归根结底是判断data的值是true还是false,由于Promise链式调用值传递的限制,在p1()的第二个then函数内部是拿不到data值的,有两个方式可以做简单的判断:

  1. 改造p2,p3函数,多带一个data参数,在第二个then函数里面就可以根据data来判断
  2. 在p1()执行外部环境初始化一个变量
let my_data;

然后在第一个then函数里面

my_data = data;

就可以直接在第二个then函数里面通过my_data来进行判断了。

其实最好的方法是直接用async/await方式来改写这个异步代码,这样就不用这些low b的方式来传一个data值了~

不能在 p2,p3中立个flag标志一下么?

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