Javascript 将获取承诺嵌套在另一个承诺中(React)?
我正在创建一个简单的React web应用程序,它将使用Reddit的api显示Reddit内容Javascript 将获取承诺嵌套在另一个承诺中(React)?,javascript,reactjs,fetch,es6-promise,Javascript,Reactjs,Fetch,Es6 Promise,我正在创建一个简单的React web应用程序,它将使用Reddit的api显示Reddit内容 handleLoad(event) { (() => { this.setState({ isLoading: true }); var newUrl = "https://www.reddit.com/r/" + this.state.search + ".json" return new Promise((resolv
handleLoad(event) {
(() => {
this.setState({
isLoading: true
});
var newUrl = "https://www.reddit.com/r/" + this.state.search + ".json"
return new Promise((resolve, reject) => {
fetch(newUrl)
.then((res) => {
if(res.ok){
resolve(res.json())
} else {
reject(res.status)
}
})
}).then(data => {
this.setState({
info: data,
isLoading: false,
error: false
})
}).catch((message)=>{
this.setState({
isLoading: false,
error: true
})
})
})()
}
这段代码确实有效,但我想知道我是否做得太多了?我希望能够在子Reddit不存在或被阻止的情况下捕获任何错误,以便我的应用程序不会崩溃。由于fetch已返回一个承诺,请在另一个承诺中处理响应。然后阻止,您不需要将其包装在另一个承诺中 快乐之路: 调用API 将响应解析为JSON 处理成功的响应 不那么快乐的道路: 1.调用API 2.检查res,如果不正常,则抛出状态错误 3.catch块将处理抛出的错误 例如: var newUrl=https://www.reddit.com/r/emoji.json 获取新URL .thenres=>{ 如果!res.ok抛出新的Errorres.status; } .thenres=>res.json .thendata=>{ console.logdata//处理成功 }.catcherror=>{ console.logerror.message//处理失败
} 因为fetch已经返回了一个承诺,所以在另一个承诺中处理响应。然后阻塞,您不需要将它包装在另一个承诺中 快乐之路: 调用API 将响应解析为JSON 处理成功的响应 不那么快乐的道路: 1.调用API 2.检查res,如果不正常,则抛出状态错误 3.catch块将处理抛出的错误 例如: var newUrl=https://www.reddit.com/r/emoji.json 获取新URL .thenres=>{ 如果!res.ok抛出新的Errorres.status; } .thenres=>res.json .thendata=>{ console.logdata//处理成功 }.catcherror=>{ console.logerror.message//处理失败
} 以下几点就足够了 如果您的承诺成功,则返回一个新的JSON承诺并相应地设置状态 如果没有,则在catch块中抛出一个错误,您已经在该块中处理该错误的setState
handleLoad(event) {
(() => {
this.setState({
isLoading: true
});
var newUrl = "https://www.reddit.com/r/" + this.state.search + ".json"
fetch(newUrl)
.then((res) => {
if (res.ok) {
return res.json()
}
throw new Error('failed')
})
.then(data => {
this.setState({
info: data,
isLoading: false,
error: false
})
}).catch((message) => {
this.setState({
isLoading: false,
error: true
})
})
})()
}
以下几点就足够了 如果您的承诺成功,则返回一个新的JSON承诺并相应地设置状态 如果没有,则在catch块中抛出一个错误,您已经在该块中处理该错误的setState
handleLoad(event) {
(() => {
this.setState({
isLoading: true
});
var newUrl = "https://www.reddit.com/r/" + this.state.search + ".json"
fetch(newUrl)
.then((res) => {
if (res.ok) {
return res.json()
}
throw new Error('failed')
})
.then(data => {
this.setState({
info: data,
isLoading: false,
error: false
})
}).catch((message) => {
this.setState({
isLoading: false,
error: true
})
})
})()
}
除掉外包装纸除掉外包装纸