Как ожидать возвращаемое значение JSON (возврат занимает не менее 30 секунд), прежде чем регистрировать его?JavaScript / реагируют / экспресс - PullRequest
0 голосов
/ 12 декабря 2018

Это продолжение этих потоков:

Как установить состояние реагирующего компонента с определенным элементом из возвращенного объекта 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 успешно зарегистрирован на сервере.

Есть идеи?Спасибо!

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Ваша секунда неверна, вы никогда не получите ответ

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

Кроме того, как сказал Рикин, ваш первый код выглядит нормально.Попробуйте добавить .catch

0 голосов
/ 12 декабря 2018

Первый блок кода работает, может быть, вы хотите присоединить .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>

Надеюсь, это прояснит.

...