调用异步函数的客户端代码是否需要使用await?

随机位

想象一下以下假设的,最小的函数实现,该函数使用axios执行简单的HTTP GET请求。用法await/async如帖子中所述。

const axios = require('axios')

exports.getStatus = async id => {
  const resp = await axios.get(
    `https://api.example.com/status/${id}`
  )

  return resp
}

诺言是否无法使用解决await要求客户使用await如下图所示的内容吗?是否可以安全地假设客户端何时使用异步函数,并且await在调用该函数时也需要使用异步函数?

// client
const { getStatus } = require('./status')

const response = await getStatus(4)
准瓦尔

简短的回答,不。标记函数async意味着两件事:

1)您可以await在函数内部使用

2)函数返回一个promise也就是说,您可以在其返回值上使用await,或者可以使用.then,或Promise.all,甚至可以忽略该返回值,或者可以使用promise进行任何其他操作。

例如,您可以执行以下操作(具体取决于您的用例),因为它不需要等待响应继续,因此可以提高性能。

// client
const { getStatus } = require('./status')

const response4 = getStatus(4);
const response5 = getStatus(5);

// do stuff that don't rely on the responses.

response4.then(response => myOutput.setFirstOutput(response));
response5.then(response => myOutput.setSecondOutput(response));

顺便说一句,您的第一个代码片段对await;的使用是多余的相当于

const axios = require('axios')

exports.getStatus = id =>
  axios.get(`https://api.example.com/status/${id}`);

这是因为return await promise等于return promise,都返回相同的诺言。关于被拒绝的承诺有一个例外。等待被拒绝的诺言将引发异常(您可以使用try/catch捕获),而直接返回被拒绝的诺言不会引发异常,但您仍应处理拒绝(带有.catch子句)。为了显示:

let promise = new Promise(resolve => setTimeout(() => resolve('resolved after 2 seconds'), 2000));

let returnPromise = () => promise;
let returnAwaitPromise = async () => await promise;

returnPromise().then(value => console.log('returnPromise,', value));
returnAwaitPromise().then(value => console.log('returnAwaitPromise,', value));

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

客户端和服务器是否需要使用相同的端口进行连接?

SOAP客户端真的需要使用WSDL吗?

是否可以使用 Python 客户端对 VoltDB 进行异步存储过程调用

如果您正在等待异步函数调用,是否需要使用Expect.assertions()?

使用参数调用 Testcafe 客户端函数

PHP使用客户端证书调用Soap函数

需要使用从 Web api 获取的 DataTable 并将其显示在客户端的 aspx 页面中

为什么需要使用 await 关键字来调用异步方法

阻止客户端调用JavaScript函数

函数调用中需要身份验证的 PHP SOAP 客户端

Springboot:如何使用Web客户端,而不是RestTemplate表演非阻塞和异步调用

协程程序的异步http调用(使用诸如Feign之类的http客户端)

Scala中的同步和异步客户端代码

来自客户端的并行异步Ajax调用

我需要使用kubernetes python客户端获取Kubernetes集群中Pod的资源使用情况

如何使用客户端JavaScript调用服务器端NodeJS函数

我需要使用pyinstaller应用程序打包MySQL服务器/客户端吗?

需要mimo icap netty实现客户端示例代码

Safari无法在服务器端的刷新/ onbeforeunload上运行回调函数(调用客户端代码)

是否需要生成Java类才能使用spring-ws客户端

在 REST API 客户端中,您是否需要为每个端点使用多个 GET 方法?

如果我们使用 Angular 6,是否需要自定义客户端验证?

是否有必要使用基于HTTP的客户端/服务器通信进行应用程序开发?

是否不可能在客户端永久更改客户端的Web代码?

TLS 客户端是否需要安装证书?

信号R客户端代码未调用HUb

如何使用Java代码检查客户端浏览器中是否启用了JavaScript

是否建议使用 Swagger 编辑器生成的服务器或客户端代码?

如何使用SAP Cloud SDK调用Java客户端内部的绑定函数/动作?