我正在使用一个辅助函数 (fetchGet
) 来返回一个返回 promise 的异步函数 (fetchWrapper
)。
这个辅助函数是否需要声明为异步的,它本身会返回一个 promise ?
我这里的情况是使用 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
函数声明为异步函数,以便它返回 promise ?
或者我可以像下面那样将它声明为一个普通的同步函数吗?
(对于 getSpecificData
函数来说确实是相同的情况)
function fetchGet(url) {
return fetchWrapper(url, 'GET');
}
最佳答案
Does a function need to be declared as asynchronous to return a promise?
不,一点也不。事实上,promises 早在 async
函数出现之前就已经存在了。
你的包装器可以是:
function fetchGet(url) {
return fetchWrapper(url, 'GET');
}
如果您没有在函数内使用 await
,则不需要 async
。您可以选择拥有它以标记函数的异步性质,例如,作为代码内文档(IDE 中的代码提示等)。但这不是必需的。
旁注:fetchWrapper
有问题。如果出现 HTTP 错误,它会成功并返回 undefined
的实现值。这意味着使用它的代码必须在使用它之前检查 fulfillment 值以查看它是否为 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;
}
关于javascript - 是否需要将函数声明为异步函数才能返回 promise ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56253824/