JavaScript承诺设置

JavaScript承诺设置,javascript,asynchronous,promise,Javascript,Asynchronous,Promise,我是一名经验丰富的工程师,但JavaScript中的承诺仍然让我非常困惑。最重要的是,我所在的项目使用流来键入JavaScript 因此,我有一个函数a,它返回从网络请求返回的URL列表。这个函数实际上返回一个承诺,并且是异步的。(返回类型为Promise) 现在,我需要添加另一个同样返回URL列表的请求。和以前一样,我们将其称为函数B。(相同的返回类型Promise) 然后,原始函数的调用方希望返回一个承诺。我想做一个函数C,首先调用函数B,然后根据函数B的结果,它要么返回那个承诺,要么调用函

我是一名经验丰富的工程师,但JavaScript中的承诺仍然让我非常困惑。最重要的是,我所在的项目使用流来键入JavaScript

因此,我有一个函数a,它返回从网络请求返回的URL列表。这个函数实际上返回一个承诺,并且是异步的。(返回类型为
Promise

现在,我需要添加另一个同样返回URL列表的请求。和以前一样,我们将其称为函数B。(相同的返回类型
Promise

然后,原始函数的调用方希望返回一个承诺。我想做一个函数C,首先调用函数B,然后根据函数B的结果,它要么返回那个承诺,要么调用函数a并返回它的承诺

我必须保持它的异步性,而就我的一生而言,我无法理解这一点。如何编写函数C

请停下来!我希望这是有道理的

附言。 有点像这样:

async getAllURLs(): Promise<?Array<SignedURL>> 
{

  let result: Promise<?Array<SignedURL>> = Promise.resolve([]); // wrong

  let res1 = this.getBetterUrls().then((urls) => 
  {
    if (urls && urls.length > 0) 
    {
      result = res1;
    } 
    else 
    {
      let res2 = this.getOldUrls().then((lesserUrls) => 
      {
        if (lesserUrls && lesserUrls.length > 0) 
        {
          result = res2;
        }
      });
    }
  });

  return result; // wrong
}

async getAllURLs():Promise我想这会起作用:

async getAllURLs(): Promise<Array<SignedURL>> {
  const betterUrls = await this.getBetterUrls();

  if (betterUrls && betterUrls.length > 0) { return betterUrls; }

  const lesserUrls = await this.getOldUrls();

  return lesserUrls && lesserUrls.length > 0 ? lesserUrls : [];
}
async getAllURLs():Promise{
const betterUrls=等待这个;
如果(betterUrls&&betterUrls.length>0){return betterUrls;}
const lesserUrls=等待此消息。getOldUrls();
返回lesserUrls&&lesserUrls.length>0?lesserUrls:[];
}

这不是一个同步吗?不,这正是使用
async
/
await
编写异步代码的方式。
async getAllURLs
@太空熊-线索在单词
async
。。。肯定是异步的,因为调用方没有执行wait?
wait…
在内部使用afaik,所以您不必手动创建它。调用
async
函数时,您会得到一个用于跟踪函数返回的承诺。