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

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

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

  1. calc() {
  2. ...
  3. if (condition) {
  4. return new Promise(...) ; // promise1
  5. }
  6. else {
  7. return new Promise(...); // promise2
  8. }
  9. }

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

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

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

  1. calc () {
  2. subscribe(()=> { do something and need to flash upper caller that is done;}
  3. }

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

yzuktlbb

yzuktlbb1#

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

  1. calc() {
  2. ...
  3. if (condition) {
  4. return { id: 1, promise: new Promise(...) }; // promise1
  5. }
  6. else {
  7. return { id: 2, promise: new Promise(...) }; // promise2
  8. }
  9. }

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

  1. const result = calc();
  2. if(result.id === 1){
  3. result.then()=>{ do something; } // if promise 1;
  4. }
  5. else if(result.id === 2) {
  6. result.then()=>{ do nothing; } // if promise 2;
  7. }
展开查看全部

相关问题