ReactJS / Ax ios / Firebase - передача данных ответа из POST для использования в PUT - PullRequest
0 голосов
/ 04 августа 2020

Я использую Ax ios .post для создания новой записи. С этой новой записью есть уникальный ключ, назначенный этой записи из Firebase, который мне понадобится в моей следующей операции PUT.

В настоящее время я использую вложенный .then, и, похоже, он работает так, как должен. Я просто не уверен, как я могу преобразовать это в Promise.all, не зная уникальный ключ, который нужно передать во второй запрос. Кажется, он подвержен проблемам, как я его структурирую. Есть ли способ использовать Promise.all для обеспечения выполнения обоих запросов? Или, может быть, все в порядке?

Полнофункциональная песочница находится здесь: https://codesandbox.io/s/react-sample-5nc1z?file= / index. js

И вот та часть, о которой идет речь:

  postColumn = (columnArr) => {
    axios
      .post(
        "/workflow/boards/" + this.state.boardID + "/columns.json",
        columnArr
      )
      .then((response) => {
        // console.log(response);
        const newColumnIds = [...this.state.columnIds, response.data.name];
        const newColState = {
          columns: {
            ...this.state.columns,
            [response.data.name]: { columnvalue: columnArr.columnvalue },
          },
        };
        this.setState(newColState);
        axios
          .put(
            "/workflow/boards/" + this.state.boardID + "/columnIds.json",
            newColumnIds
          )
          .then((response) => {
            const newColIdState = {
              columnIds: newColumnIds,
            };
            this.setState(newColIdState);
          })
          .catch((error) => {
            console.log("Error in putColumnIds", error);
          });
      })
      .catch((error) => {
        console.log("Error in postColumn", error);
      });
  };

1 Ответ

1 голос
/ 04 августа 2020

Если ваш второй запрос зависит от некоторых данных из вашего первого запроса, Promise.all не будет работать. Цель Promise.all - запустить два обещания (в вашем случае - сетевые запросы) одновременно, поэтому, если вы не можете этого сделать (поскольку вы сначала полагаетесь на выполнение одного, вы не можете его использовать). При этом ваш код выглядит совершенно нормально, и пока он работает, в вашей реализации не должно быть ничего плохого.

Подробнее: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all

...