我有一个JS程序,对特定的API进行了大量的fetch()调用。我想将所有fetch()调用抽象为一个名为“ apiService”的类,这样我的代码将更具可读性。我希望apiService通过以下方式应用一些智能,然后将响应返回给调用方:
-apiService应该检查响应以查看是否存在错误,必须始终以相同的方式进行处理。
-fetch()有时会收到一个“ res”,它是原始数据,应按原样使用,有时它会收到需要一个.then(res => res.json()。then(res可以返回一个对象。
因此,我不能仅仅从apiService中执行“ return fetch(...”),因为apiService需要使用响应来处理一个或多个.then()块,但是我还需要返回一些使调用代码正常工作的内容异步而不阻塞并等待。
任何人都知道我可以如何构造apiService函数来处理html响应,而且还异步返回,即调用函数将在错误检查后接收结果对象。
最佳答案
因此,我不能仅仅从apiService中执行“ return fetch(...”),因为apiService需要使用响应来处理一个或多个.then()块,但是我还需要返回一些使调用代码正常工作的内容异步而不阻塞并等待。
这给我的感觉是您可能会误会诺言。举个例子:
const doAsyncWork = () => fetch('somewhere').then(() => console.log('fetch is complete'))
// use the above function
doAsyncWork().then(() => console.log('used the fetching function'))
上面代码的输出将是
fetch is complete
used the fetching function
如您所见,通过在
then
调用之后链接fetch
,实际上是在返回then
的结果,而不是获取。另一种思考的方式是,如果您打电话给您,实际上返回的是什么const result = a().b().c() // we are really returning the result of `c()` here.
考虑到以上几点,您绝对可以执行以下操作:
const apiCall = loc => fetch(loc).then(res => {
// do things with your response
return res
})
apiCall('someEndpoint').then(finalRes => {
console.log('this is called after fetch completed and response processed')
})