在异步函数内链接请求

问题描述 投票:0回答:1

我对异步函数中的链接请求感兴趣。

比方说,我需要在异步函数内的

request2
之后调用
request1
。 我会这样做:

const someFunct = async () => {
  await request1();
  await request2();
  ...
}

但是如果我在

request2
中调用
request1().then()
会起作用吗?是一样的吗?

const someFunct = async () => {
  await request1()
     .then(() => request2());
  ...
}
javascript asynchronous promise
1个回答
-1
投票

如果您想确保在异步函数中 request2 在 request1 之后被调用,您有几个选择。正如您在代码中提到的那样,使用 wait 是一种常见且直接的方法,但您也可以通过使用 .then() 链接 Promise 来实现此目的 这是两种方法的示例:

使用等待:

const someFunct = async () => {
  await request1();
  await request2();
  // Any code that depends on the results of request1 and request2
}

当您使用await时,第二个请求(request2())只会在第一个请求(request1())完成后才会执行。这意味着 request2() 在 request1() 完成执行之前不会启动,并且它们将按顺序运行。 使用 .then():

const someFunc = () => {
  return request1().then(() => {
    return request2();
  });
  // ...
}

当您使用 .then() 时,您正在创建一条承诺链。在这种情况下,request2() 仅在 request1() 解析(成功完成)后调用。但是,这里的区别在于您没有使用 async/await,因此函数 someFunc 不是异步函数。您可以在调用站点使用 .then() 或 async/await 处理 someFunc() 的结果。

综上所述,两种方法都实现了链接请求的目标,但它们具有不同的语法和行为。如果您想使用 async/await 并确保 request2() 在 request1() 完成之前不会启动,请使用第一种方法。如果您更喜欢使用 .then() 链接(如第二个示例中所示),您也可以这样做,但请确保使用 .then() 处理结果,或者如有必要,请在调用站点等待。

© www.soinside.com 2019 - 2024. All rights reserved.