javascript 在async函数中链接请求

0ejtzxu1  于 12个月前  发布在  Java
关注(0)|答案(1)|浏览(86)

我对异步函数中的链接请求很感兴趣。
比如说,我需要在异步函数中的request1之后调用request2。我会这样做:

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

但是如果我在request1().then()内部调用request2,它会工作吗?是一样的吗?

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

af7jpaap1#

如果你想确保在async函数中request 1之后调用request 2,你有两个选项。正如你在代码中提到的那样,使用await是一种常见而直接的方法,但你也可以通过使用**.then()**链接promise来实现这一点。
使用await:

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

当你使用await时,第二个请求(request 2())只会在第一个请求(request 1())完成后执行。这意味着request 2()在request 1()完成执行之前不会启动,它们将按顺序运行。使用**.then()**:

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

当你使用.then()时,你正在创建一个promise链。在这种情况下,request 2()只有在request 1()解析(成功完成)之后才被调用。然而,这里的区别是你没有使用async/await,所以函数someFunc不是一个async函数。你可以在调用站点使用.then()或async/await处理someFunc()的结果。
总而言之,这两种方法都实现了链接请求的目标,但它们具有不同的语法和行为。如果你想使用async/await并确保request 2()在request 1()完成之前不会启动,那么使用第一种方法。如果您喜欢使用.then()链接,如第二个示例中所示,您也可以这样做,但请确保使用.then()处理结果,或在必要时在调用站点等待。

相关问题