如何将 .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
}

这应该可以帮助您重写代码。