【问题标题】:is it possible to distruct two values from async/await [any solution]是否可以从 async/await 中分离两个值 [任何解决方案]
【发布时间】:2021-05-12 07:03:29
【问题描述】:

所以我一直在以不同的方式玩 promises 在这里我试图了解如何以不同的方式实现 promises 和 async/await 并且我遇到了困难我想要做的是转移这块代码(有效的)进入这个异步/等待,它很乱,对我不起作用 [原谅我的英语和我的代码编写]

完美运行

React.useEffect(() => {
    if (!pokemonName) {
      return
    }
    setPokemon(null);
    setError(null)
    fetchPokemon(pokemonName).then(
      pokemon => setPokemon(pokemon),
      error => setError(error),
    )
  }, [pokemonName])

没用

React.useEffect(() => {
            if (!pokemonName) {
              return
            }
            setPokemon(null)
            setError(null)
            async function effect() {
              const [result,error] = await fetchPokemon(pokemonName);
              if(error){
                return setError(error);
              }else{
                return setPokemon(result);
              }
            }
            effect()
          }, [pokemonName])

【问题讨论】:

    标签: javascript reactjs async-await promise


    【解决方案1】:

    你可以将第一个sn-p转换成

    React.useEffect(async () => {
        if (!pokemonName) {
          return
        }
        setPokemon(null);
        setError(null)
        try {
          setPokemon(await fetchPokemon(pokemonName));
        } catch (error) {
          setError(error);
        }
      }, [pokemonName])
    

    使用await 的异步函数调用不会返回错误。它抛出错误。因此,您必须捕获潜在的错误。如果函数不能是async,您可以使用立即调用的函数表达式 (IIFE)

    React.useEffect(() => {
        if (!pokemonName) {
          return
        }
        setPokemon(null);
        setError(null)
        (async () => {
          try {
            setPokemon(await fetchPokemon(pokemonName));
          } catch (error) {
            setError(error);
          }
        })();
      }, [pokemonName])
    

    【讨论】:

    • 它的作用就像魅力只是记住 useEffect(React.useEffect(async () => .......) 钩子是你不能返回除了清理函数之外的任何东西。在这种情况下,由于 async/await 语法的语义,您正在返回一个承诺,但是第二个工作得很好,我学到了很多谢谢
    猜你喜欢
    • 2016-05-15
    • 2019-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-15
    • 2019-04-30
    • 2019-02-24
    • 1970-01-01
    相关资源
    最近更新 更多