是否需要将函数声明为异步函数以返回承诺?

尼古拉斯·L

我正在使用一个辅助函数(fetchGet),该函数返回一个异步函数,该函数返回一个promise(fetchWrapper)。是否需要将该帮助程序函数声明为异步的,以使其自身返回承诺?

我这里的情况是使用fetch,这需要在我的第一个函数中等待fetchWrapper(为便于阅读,此处简化):


// returns a promise
async function fetchWrapper(url, method) {
  const response = await fetch(url, {method: method});
  if (!response.ok) {
    throw new Error("HTTP error " + response.status);
  }
  return response;
}

async function fetchGet(url) {
  return fetchWrapper(url, 'GET');
}

async function getSpecificData() {
  return fetchGet('/a/specific/url');
}

我是否需要fetchGet如上所述函数声明为异步函数,以使其返回承诺?

还是可以将其声明为如下所示的普通同步函数?(对于getSpecificData函数,情况确实如此

function fetchGet(url) {
  return fetchWrapper(url, 'GET');
}
TJ人群

是否需要将函数声明为异步函数以返回承诺?

一点都不。实际上,许诺早于async职能开始。

您的包装器可以是:

function fetchGet(url) {
  return fetchWrapper(url, 'GET');
}

async如果您不在await函数内部使用,则不需要您可能会选择使用它来标记该函数的异步特性,例如,作为代码内文档(IDE中的代码提示等)。但这不是必需的。


旁注:您对遇到问题fetchWrapper如果出现HTTP错误,它将以实现值成功undefined这意味着使用它的代码必须undefined在使用它之前检查实现值以查看它是否在。我建议将HTTP错误设置为错误(拒绝):

async function fetchWrapper(url, method) {
  const response = await fetch(url, {method: method});
  if (!response.ok) {
    throw new Error("HTTP error " + response.status);
  }
  return response;
}

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么在从函数返回数组时需要将数组声明为静态数组。(C++)

具有所有const属性的类是否也需要将成员函数声明为const?

是否在firebase云函数中返回多个异步函数的承诺?

将现有函数声明为异步?

如何构造函数以返回承诺

错误:声明为“ noreturn”的函数不应返回

从声明为void的函数返回整数值

定义小函数以将其声明为内联

使用 PPL 时是否需要将析构函数与异步函数同步?

检查函数是否声明为递归

为什么我需要将这个函数声明为extern。没有它就可以工作

如何在flutter(dart)中将异步函数声明为变量?

在调用声明为@MainActor 的异步函数的任务中使用@MainActor

异步函数中的 await-ed 函数是否必须返回承诺?(节点.js)

异步函数返回承诺而不是解析值

Javascript异步函数返回然后捕获承诺?

typecript 承诺返回类型异步函数

潜在的异步函数返回立即解决的承诺?

异步函数返回一个承诺

如何通过异步函数的修改返回承诺?

从异步函数返回的访问承诺实例

异步函数不返回值,但承诺

是否可以将具有“自动”返回类型的模板函数声明为类的朋友?

是否需要将私有嵌套类的内部声明为私有?

内部闭包的捕获列表是否需要将“ self”重新声明为“ weak”或“ unowned”?

异步函数返回承诺,但调用函数未解析

将函数签名中的枚举声明为返回状态

如果TestUtils.renderIntoDocument声明为匿名函数,则返回null

JavaScript-将函数声明为变量是否明智?