首页 > 解决方案 > 如何在记录之前等待 json 返回值(返回至少需要 30 秒)?javascript/反应/快递

问题描述

这是对这些线程的跟进:

如何使用返回的 json 对象中的特定项目设置反应组件的状态?

如何将 json 数据返回到反应状态?

web3用来在 上签署交易Ethereum,然后发送json带有交易数据的对象。json至少需要 30 秒才能返回。

我正在尝试console.log()使用以下代码处理数据:

axios.post(
    "http://compute.amazonaws.com:3000/users", 
    {
        value: "value",
        fileName: "fileName",
        hash: "hash"
    }
)
.then(res => { console.log(res.data);});

控制台中没有出现日志。

以上实际上是我制作async并添加的更大功能的一部分await。这没有产生任何结果或错误:

const onSuccess = async payment => {
      axios.post(
        "http://ec2-54-67-28-69.us-west-1.compute.amazonaws.com:3000/users",
        {
        value: "value",
        fileName: "fileName",
        hash: "hash"
        }
      );
      await (res => {
        console.log(res.data);
      });

我认为问题是Ethereum需要一些时间来挖掘交易。json在记录之前我需要等待响应。

我的express服务器没有问题,json已成功登录服务器。

有任何想法吗?谢谢!

标签: javascriptjsonaxiosethereumweb3

解决方案


第一个代码块似乎工作,可能是你想附加.catch到它作为错误处理程序。

axios.get('https://jsonplaceholder.typicode.com/todos/1')
  .then(response => console.log(response.data))
  .catch(function(error) {
    console.log(error);
  });
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

在第二部分,我认为你await做错了。您正在等待一个永远不会被调用的函数。Await 应该监听在下面的实例中被调用的东西,一个由返回的承诺axios

const samplePayload = {
  "userId": 100,
  "id": 100,
  "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
  "body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
};


// Using GET here for demo but you can swap it with POST
const onSuccess = async payment => {
  return await axios.get(
    "https://jsonplaceholder.typicode.com/posts", samplePayload
  ).then(res => {
    console.log(res.data);
  });
}

console.log(onSuccess());
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

我希望澄清。


推荐阅读