(javascript)如何在不同条件下在一个函数中返回两个承诺

83qze16e  于 2021-09-13  发布在  Java
关注(0)|答案(1)|浏览(232)

我有一个函数calc(),它可能有以下内容:

calc() {
    ...
    if (condition) {
        return new Promise(...) ; // promise1
    }
    else {
        return new Promise(...); // promise2
    }
}

函数调用它将以不同的方式执行这两个承诺:

calc().then()=>{ do something; } // if promise 1;
      .then()=>{ do nothing; } // if promise 2;

有可能吗?
我问的原因是calc()本身是一个异步函数。它订阅了一些流程,如:

calc () {

    subscribe(()=> { do something and need to flash upper caller that is done;}
}

因此,如果calc()没有从另一个进程接收到信号,它将不会产生结果,并且上层调用程序确实拥有继续处理所需的数据。

yzuktlbb

yzuktlbb1#

假设您同步地知道条件的结果。为什么不将承诺封装在一个对象中,并使用诸如id之类的属性来表示返回了哪个承诺?

calc() {
    ...
    if (condition) {
        return { id: 1, promise: new Promise(...) }; // promise1
    }
    else {
        return { id: 2, promise: new Promise(...) }; // promise2
    }
}

然后,您可以根据返回的id决定如何处理承诺。

const result = calc();

if(result.id === 1){
    result.then()=>{ do something; } // if promise 1;
}
else if(result.id === 2) {
    result.then()=>{ do nothing; } // if promise 2;
}

相关问题