次に、setStateが終了するのを待ってから、次のメソッドを呼び出しますか?

アダムノートン

Reactアプリにこのメソッドがあります:

私の問題はcreateQuestions()findEmployeeId()メソッドが実行される前実行されることです。.then待たせてはいけませんか?

内部findEmployeeId()ではsetState操作を行っています。それが終わるのを待ちませんか?createQuestions()実行する前にデータを更新する必要があります

createInterview() {
    fetch(API_URL + `/interview/create`, {
      method: "PUT",
      body: JSON.stringify({
        employee: this.state.employee,
        employment_level: this.state.employment_level,
        audit_id: this.props.auditId,
      }),
      headers: { "Content-Type": "application/json" },
    })
      .then((res) => {
        if (!res.ok) {
          throw new Error();
        }
        return res.json();
      })
      .catch((err) => console.log(err))
      .then(() => this.findEmployeeId())
      .then(() => this.createQuestions());

    this.setState({ showHide: false });
  }

これがfindEmployeeId方法です。次のものが実行される前に完了するまで待機させるにはどうすればよいですか?

findEmployeeId() {
    fetch(API_URL + `/employee/${this.state.employee}/${this.props.auditId}`)
      .then((res) => {
        if (!res.ok) {
          throw new Error();
        }
        return res.json();
      })
      .then((result) => {
        this.setState({ lastEmployeeId: result[0].employee_id });
        console.log(result);
      })
      .catch((error) => {
        console.log(error);
      });
  }
ホセ・カブレラ・ズニガ

問題は基本的に、findEmployeeId()の後にcreateQuestions()が実行されることを保証する方法を見つけることです。これが質問の核心です。setState Callbackを使用すると、これを実現できます。setStateコールバックの使用は面倒かもしれないと言われていますが、2つの関数の構成について十分に理解している場合は、そうすべきではありません。

setStateは非同期です...したがって、次のような2つの操作の連続性を想定しないことが重要です。

this.setState({stateA : a})
this.setState({stateB : b})

setStateを介してシーケンシャルを「強制」する唯一の方法は、コールバックを使用することです。

this.setState({....}、()=> {setStateが完了した後に実行})

どういうわけか、これはあなたが従う必要があるものです。つまり、findEmployeID内で使用しているsetStateでは、次のようなことを行う必要があります。

const self = this;
this.setState({ ..... }, () => {self.createQuestions()})

その否定を置いた人は誰でも彼の理由をよりよく説明します。フェッチの.then部分は連続性を保証しないため、2つのsetStateが次々に実行されるのと同様の状況になります。待機も連続性を保証するものではありません。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

別のメソッドが呼び出されるのを待ってから、結果を続行します

分類Dev

メソッドは、非同期が完了するのを待ってから次の行に移動します

分類Dev

JavaFXは、アニメーションメソッドが終了するのを待ってから、次のメソッドに進みます

分類Dev

ノード-1つのAPI呼び出しが完了するまで待ってから、次のAPI呼び出しをトリガーします

分類Dev

ダウンロードメソッドが終了するのを待ってから、次の.then --node.jsを実行します

分類Dev

メソッドを呼び出す前に、Firebaseからのデータで配列が初期化されるのを待っています

分類Dev

インラインスレッドが完了するのを待ってから、次のメソッドに移動します

分類Dev

ReactRedux-次のアクションがディスパッチされる前に非同期API呼び出しが終了するのを待っています

分類Dev

次に、promiseを返すメソッドが終了した後にのみ呼び出します

分類Dev

jquery post call関数をn回実行しますが、それぞれが完了するのを待ってから次の関数を呼び出します

分類Dev

ボレー応答が完了するのを待ってから次のメソッドを実行する方法

分類Dev

メソッドチェーンを使用して、関数がコースを実行するのを待ってから再度呼び出す前に、同じJavaScript関数を繰り返し呼び出すにはどうすればよいですか?

分類Dev

メソッドが完了するまで待ってから、次の行に進みます Android

分類Dev

呼び出し元メソッドの次の行が実行される前に非同期メソッドが終了するのはなぜですか?

分類Dev

setStateが終了するのを待ってから、データを返します

分類Dev

Java:元のメソッドが終了している間にメソッドを呼び出す方法はありますか?

分類Dev

Jest:非同期テストが終了するのを待ってから、次のテストを実行します

分類Dev

関数内のAjax呼び出しが終了するのを待ってから、オブジェクトを外部変数に返します

分類Dev

API呼び出しが終了するのを待ってから結果を返す方法は?

分類Dev

PythonのURLによって呼び出されたメソッドから画像を取得します

分類Dev

.map()の実行が終了するのを待ってから、次のコード行に進む方法

分類Dev

次のメソッドを呼び出す前にFirebaseが完了していません

分類Dev

関数が終了するのを待ってから、再度呼び出してください

分類Dev

呼び出しメソッドを呼び出すと「引数の数が間違っています」例外が発生するのはなぜですか(JAVA)

分類Dev

Qt websocketはメッセージを送信し、応答を待ってから次のメソッドに進みます

分類Dev

jQueryがAjax呼び出しが終了するのを待ってから戻るようにするにはどうすればよいですか?

分類Dev

ループ内の各アニメーションが終了するのを待ってから、次のアニメーションを実行します

分類Dev

別のメソッドが呼び出されたときにメソッドを呼び出しますか?

分類Dev

「next_element」メソッドを呼び出さずに、Nokogiriを使用して次の要素を選択するにはどうすればよいですか?

Related 関連記事

  1. 1

    別のメソッドが呼び出されるのを待ってから、結果を続行します

  2. 2

    メソッドは、非同期が完了するのを待ってから次の行に移動します

  3. 3

    JavaFXは、アニメーションメソッドが終了するのを待ってから、次のメソッドに進みます

  4. 4

    ノード-1つのAPI呼び出しが完了するまで待ってから、次のAPI呼び出しをトリガーします

  5. 5

    ダウンロードメソッドが終了するのを待ってから、次の.then --node.jsを実行します

  6. 6

    メソッドを呼び出す前に、Firebaseからのデータで配列が初期化されるのを待っています

  7. 7

    インラインスレッドが完了するのを待ってから、次のメソッドに移動します

  8. 8

    ReactRedux-次のアクションがディスパッチされる前に非同期API呼び出しが終了するのを待っています

  9. 9

    次に、promiseを返すメソッドが終了した後にのみ呼び出します

  10. 10

    jquery post call関数をn回実行しますが、それぞれが完了するのを待ってから次の関数を呼び出します

  11. 11

    ボレー応答が完了するのを待ってから次のメソッドを実行する方法

  12. 12

    メソッドチェーンを使用して、関数がコースを実行するのを待ってから再度呼び出す前に、同じJavaScript関数を繰り返し呼び出すにはどうすればよいですか?

  13. 13

    メソッドが完了するまで待ってから、次の行に進みます Android

  14. 14

    呼び出し元メソッドの次の行が実行される前に非同期メソッドが終了するのはなぜですか?

  15. 15

    setStateが終了するのを待ってから、データを返します

  16. 16

    Java:元のメソッドが終了している間にメソッドを呼び出す方法はありますか?

  17. 17

    Jest:非同期テストが終了するのを待ってから、次のテストを実行します

  18. 18

    関数内のAjax呼び出しが終了するのを待ってから、オブジェクトを外部変数に返します

  19. 19

    API呼び出しが終了するのを待ってから結果を返す方法は?

  20. 20

    PythonのURLによって呼び出されたメソッドから画像を取得します

  21. 21

    .map()の実行が終了するのを待ってから、次のコード行に進む方法

  22. 22

    次のメソッドを呼び出す前にFirebaseが完了していません

  23. 23

    関数が終了するのを待ってから、再度呼び出してください

  24. 24

    呼び出しメソッドを呼び出すと「引数の数が間違っています」例外が発生するのはなぜですか(JAVA)

  25. 25

    Qt websocketはメッセージを送信し、応答を待ってから次のメソッドに進みます

  26. 26

    jQueryがAjax呼び出しが終了するのを待ってから戻るようにするにはどうすればよいですか?

  27. 27

    ループ内の各アニメーションが終了するのを待ってから、次のアニメーションを実行します

  28. 28

    別のメソッドが呼び出されたときにメソッドを呼び出しますか?

  29. 29

    「next_element」メソッドを呼び出さずに、Nokogiriを使用して次の要素を選択するにはどうすればよいですか?

ホットタグ

アーカイブ