2017-11-27 12 views
1
getSelectedCityId() { 
    let citiName 
    citiId; 
    axiosInstance 
     .get("/api/cities") 
     .then(response => { 
      if (response.status === 200 && response.data) { 
       citiName = this.state.city; 
       citiId = this.state.city.city_id; 
      } 
     }) 
     .catch(error => {}); 

    let url = `/api/${citiName}/${citiId}/schools/`; 
    axiosInstance 
     .get(url) 
     .then(response => { 

     }) 
     .catch(error => { 
      console.log(error); 
     }); 
} 

私はそのAPI呼び出しを押すと、URLが表示さ:ES6のテンプレートリテラルに動的な値を渡すことはできますか?

はlocalhost:9000/API/未定義/未定義 /学校/

私が合格しようとしています私は2番目のAPIのパラメータとして1番目のAPI呼び出しから取得するデータです。私のポイントは、なぜテンプレートリテラルが定義されていない投げているのですか?テンプレートリテラルを使用して動的データを渡すことはできませんか?

+1

ただし、非同期プロセスの一部である変数を設定しようとしているため、この場合は機能しません。 [この質問と非同期呼び出しから応答を返す方法についての回答]を読んでください(https://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-asynchronous-call ?rq = 1)。 – Andy

+0

PS - [async/wait'を使用した場合](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function)この例では、 。 [あなたのビルドプロセスにそれを含める必要があります](https://stackoverflow.com/questions/38357234/is-it-possible-to-use-async-await-in-react-js)。 – Andy

+0

@Andyちょっと分かりました!あなたの入力をありがとう! – Technologeek

答えて

3
getSelectedCityId() { 
    let citiName 
    citiId; 
    axiosInstance 
     .get("/api/cities") 
     .then(response => { 
      if (response.status === 200 && response.data) { 
       citiName = this.state.city; 
       citiId = this.state.city.city_id; 
       this.getSelectedCityIdStepTwo(`/api/${citiName}/${citiId}/schools/`); 
      } 
     }) 
     .catch(error => {}); 
} 

getSelectedCityIdStepTwo(url) { 
    axiosInstance 
     .get(url) 
     .then(response => { 

     }) 
     .catch(error => { 
      console.log(error); 
     }); 
} 

これにより、第2 AXIOS呼び出しが行われていないことを確認し、合格するための有効なURLがあります。

3

/api/citiesデータを取得するのが非同期操作なので、結果を待つ必要があります。ただ、概念実証のために:最初の1が完了するまで

getSelectedCityId() 
{ 
    let citiName 
    citiId; 
    axiosInstance 
    .get("/api/cities") 
    .then(response => { 
     if (response.status === 200 && response.data) { 
     citiName = this.state.city; 
     citiId = this.state.city.city_id; 
     return `/api/${citiName}/${citiId}/schools/`; 
     } 
     return null; 
    }) 
    .then(url => { 
     if(url) { // the data from previous then 
     axiosInstance.get(url) //.then().catch() 
     } 
    }); 
} 
+0

これは私よりも簡潔な答えです。私はあなたに降伏するでしょう! –

+0

@ JoshuaUnderwood同意します。しかし、私は分解が嫌いです。コードを小さな関数に分解すると、読み込みとデバッグがより簡単になります。 – Technologeek

+0

それは受け入れられた答えとしてisをマークしてください;) –

関連する問題