所以我正在编写一个代码框架,用于创建一个反应应用程序。有一个看起来像这样的功能:
this.asyncFunction = function () {
const url = 'https://api.com/stuff/get'
return fetch(url, httpOptions)
.then(processResponse)
.catch(handleError)
}
它像这样被调用
model.asyncFunction().then(stuff => {
this.setState({
status: 'LOADED',
stuff: stuff
})
}).catch(() => {
this.setState({
status: 'ERROR'
})
})
我的问题(我不确定如何谷歌)我想缓存结果,如果它被缓存,我想得到那个。我尝试了我认为最明显的事情:
this.asyncFunction = function () {
if(cached){
return cachedResult;
}
const url = 'https://api.com/stuff/get'
return fetch(url, httpOptions)
.then(processResponse)
.catch(handleError)
}
(并将cachedResult存储在processResponse函数中)
现在这不起作用,我得到
TypeError: ... asyncFunction(...).then is not a function
现在,从谷歌我了解到这是因为asyncFunction应该返回一个承诺(因为我们称之为"然后")。什么是正确的方式"这样做?
有点假设这是某种形式的重复但不确定如何找到它。我已经尝试过使用resolve创建一个promise,但看起来只返回undefined。
答案 0 :(得分:4)
我认为你可以做到以下几点:
this.asyncFunction = function () {
if(cached){
return Promise.resolve(cachedResult);
}
...etc
来自the docs:
Promise.resolve(value)方法返回一个Promise对象 用给定的值解决。如果该值是可以的(即具有a “然后”方法),返回的承诺将“跟随”那个, 采用其最终状态;如果值是一个承诺,那个对象 成为Promise.resolve调用的结果;否则 返回的承诺将通过价值来实现。
在您的场景中,您正在返回一个对象,因此它将返回一个将使用给定对象解析的Promise对象。