当前位置: 首页 > 知识库问答 >
问题:

从异步箭头函数返回JSX

司徒博容
2023-03-14

它必须是基本的,但请帮助我理解为什么这不起作用。

当我编写一个普通的arrow函数并返回jsx时,它就工作了。但是,当我使用async/await请求和相同的arrow函数返回jsx时,它失败了。

编辑:

实际上,我必须在列表视图中显示用户的配置文件图像。所以,我调用这个函数来检索我的渲染(){返回}块中相应用户的图像

这很有效

handleProfilePhoto = firstName => {
        return (
            <img
                className="comment-img"
                src={require("../../../../Webroot/images/dashboard/image3.png")}
                alt={firstName + " profile"}
            />
        );
    };

但事实并非如此

handleProfilePhoto = async (firstName) => {
        let err = false;

        await Axios
            .get(MY_URL)
            .then(function () {
                err = false;
            })
            .catch(function () {
                err = true;
            });

        return err === true ? (
            <img
                className="comment-img"
                src={require("../../../../Webroot/images/dashboard/image3.png")}
                alt={firstName + " profile"}
            />
        ) : (
            <img
                className="comment-img"
                src={require("../../../../Webroot/images/dashboard/image4.png")}
                alt={firstName + " profile"}
            />
        );
    };

共有1个答案

戚阳
2023-03-14

请不要使用。然后()异步/等待你要么使用链接或异步的方式。

handleProfilePhoto = async (firstName) => {
        let err = false;
      
        try {
           await Axios.get(MY_URL);
        } catch(err) {
           err = true;
        } 
        return err === true ? (
            <img
                className="comment-img"
                src={require("../../../../Webroot/images/dashboard/image3.png")}
                alt={firstName + " profile"}
            />
        ) : (
            <img
                className="comment-img"
                src={require("../../../../Webroot/images/dashboard/image4.png")}
                alt={firstName + " profile"}
            />
        );
    };

另外,handleProfilePhoto返回一个promise。

handleProfilePhoto.then(result => {
   //your result is here
})
 类似资料:
  • 问题内容: 如何从异步函数返回值?我试图喜欢这个 它给了我, 问题答案: 您不能超出范围。为了获得预期的结果,您应该将其包装到异步IIFE中,即 样品。 有关更多信息 由于返回一个Promise,因此可以将其省略,如下所示: 然后像以前一样做

  • 更新 我已经读了十几篇关于这个话题的文章,但没有一篇涉及到这个基本问题。我将在本文末尾列出一个参考资料部分。 原始帖子 我对函数的理解是,它返回一个promise。 MDN文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function 在我的程序中,我可以编写如下内容: 我

  • 问题内容: 如何从异步函数返回值?我试图喜欢这个 它给了我, 问题答案: 您不能超出范围。为了获得预期的结果,您应该将其包装到异步IIFE中,即 样品。 有关更多信息 由于返回一个Promise,因此可以将其省略,如下所示: 然后像以前一样做

  • 问题内容: 我正在使用nodejs通过Mongoose从Mongodb查询数据。获取数据后,我想对该数据做一些处理,然后再将其响应给客户端。但是我无法获得返回值。在Google上浏览后,我了解到Node.js函数是异步javascript函数(非I / O阻止)。我尝试了这个Tut( 问题答案: 获得未定义值的原因是因为find函数是异步的,并且可以随时完成。在您的情况下,使用后就结束了,因此在访

  • 问题内容: 就像一个人在这里问到但他的解决方案是调用其他函数 …我想知道是否有可能拥有一个不调用a的函数第二个功能基于异步请求的响应,但仅当异步请求响应时。 可能是这样的: 不调用另一个函数,这有可能吗? 我要实现的目标是拥有一个可以用一些参数调用的函数,该函数将返回异步Web服务(如FB)的响应。 问题答案: 简而言之,没有。您不能让异步函数同步返回有意义的值,因为该值当时不存在(因为它是在后台

  • 问题内容: 在SO中多次问过这个问题。但是我还是收不到东西。 我想从回调中获得一些价值。请看下面的脚本进行澄清。 如果我尝试返回该值,则只是“未定义”。我遵循了SO的一些想法,但仍然失败。 那些是: 问题答案: 这是不可能的,因为您无法从同步方法内部的异步调用返回。 在这种情况下,您需要将回调传递给foo,该回调将接收返回值 问题是,如果内部函数调用是异步的,则所有“包装”此调用的函数也必须是异步