如何将 .then 更改为 trycach?
How to change .then to trycach?
我想使用 async 和 try-catch 重写以下 useState 函数,我想知道如何在没有 .then/catch.
的情况下实现
import React, {useEffect, useState} from 'react';
import {StyleSheet, Text, View} from 'react-native';
import {getPopularMovies, getUpcomingMovies} from './../services/services';
import {SliderBox} from 'react-native-image-slider-box';
const Home = () => {
const [movieImages, setMovieImages] = useState('');
const [error, setError] = useState(false);
const moviePath = 'https://image.tmdb.org/t/p/w500';
useEffect(() => {
getUpcomingMovies()
.then(movies => {
const moviesImagesArr = []
movies.forEach(movie => {
moviesImagesArr.push(`${moviePath}${movie.poster_path}`);
});
setMovieImages(moviesImagesArr);
})
.catch(err => {
setError(err);
});
}, []);
return (
<View
style={{
flex: 1,
justifyContent: 'center',
alignItems: 'center',
}}>
<SliderBox images={movieImages} />
</View>
);
};
export default Home;
const styles = StyleSheet.create({});
所以我想重写下面的代码和returnuseEffect里面的新函数:
getUpcomingMovies()
.then(movies => {
const moviesImagesArr = []
movies.forEach(movie => {
moviesImagesArr.push(`${moviePath}${movie.poster_path}`);
});
setMovieImages(moviesImagesArr);
})
.catch(err => {
setError(err);
});
useEffect(() => {
new function
}, []);
一般来说,这样的代码片段:
function test() {
foo(1, 2).then((result) => {
console.log("Result:", result);
}).catch((err) => {
console.log("Error:", err);
});
}
... 可以像这样使用 async/await 重写:
async function test() {
try {
const result = await foo(1, 2);
console.log("Result:", result);
}
catch (err) {
console.log("Error:", err);
}
}
如果是这样的嵌套 .then()
调用:
foo().then((res) => {
bar(res).then((res2) => {
console.log(res2);
});
});
...变成:
try {
const res = await foo();
const res2 = await bar(res);
console.log(res2);
}
catch (err) {
// do nothing in this case
}
这应该可以帮助您重写代码。
我想使用 async 和 try-catch 重写以下 useState 函数,我想知道如何在没有 .then/catch.
的情况下实现import React, {useEffect, useState} from 'react';
import {StyleSheet, Text, View} from 'react-native';
import {getPopularMovies, getUpcomingMovies} from './../services/services';
import {SliderBox} from 'react-native-image-slider-box';
const Home = () => {
const [movieImages, setMovieImages] = useState('');
const [error, setError] = useState(false);
const moviePath = 'https://image.tmdb.org/t/p/w500';
useEffect(() => {
getUpcomingMovies()
.then(movies => {
const moviesImagesArr = []
movies.forEach(movie => {
moviesImagesArr.push(`${moviePath}${movie.poster_path}`);
});
setMovieImages(moviesImagesArr);
})
.catch(err => {
setError(err);
});
}, []);
return (
<View
style={{
flex: 1,
justifyContent: 'center',
alignItems: 'center',
}}>
<SliderBox images={movieImages} />
</View>
);
};
export default Home;
const styles = StyleSheet.create({});
所以我想重写下面的代码和returnuseEffect里面的新函数:
getUpcomingMovies()
.then(movies => {
const moviesImagesArr = []
movies.forEach(movie => {
moviesImagesArr.push(`${moviePath}${movie.poster_path}`);
});
setMovieImages(moviesImagesArr);
})
.catch(err => {
setError(err);
});
useEffect(() => {
new function
}, []);
一般来说,这样的代码片段:
function test() {
foo(1, 2).then((result) => {
console.log("Result:", result);
}).catch((err) => {
console.log("Error:", err);
});
}
... 可以像这样使用 async/await 重写:
async function test() {
try {
const result = await foo(1, 2);
console.log("Result:", result);
}
catch (err) {
console.log("Error:", err);
}
}
如果是这样的嵌套 .then()
调用:
foo().then((res) => {
bar(res).then((res2) => {
console.log(res2);
});
});
...变成:
try {
const res = await foo();
const res2 = await bar(res);
console.log(res2);
}
catch (err) {
// do nothing in this case
}
这应该可以帮助您重写代码。