かれこれ4時間ほど試行錯誤したが、全くわからず、困り果てています。
やりたいこと
現在地を取得して、その値を検索のクエリに入れたいです。
async getPosition() { // 現在地を取得 const lonlat = await navigator.geolocation.getCurrentPosition( // 取得成功した場合 function (position) { alert("緯度:" + position.coords.latitude + ",経度" + position.coords.longitude); const lon = position.coords.longitude const lat = position.coords.latitude const result = `lon=${lon}&lat=${lat}` console.log(result) // ここは正しく表示 return result }, // 取得失敗した場合 function (error) { switch (error.code) { case 1: //PERMISSION_DENIED alert("位置情報の利用が許可されていません"); break; case 2: //POSITION_UNAVAILABLE alert("現在位置が取得できませんでした"); break; case 3: //TIMEOUT alert("タイムアウトになりました"); break; default: alert("その他のエラー(エラーコード:" + error.code + ")"); break; } } ); return lonlat } async handleAreaChange(value) { this.setState({ selected_area: value }); let search_by = "" switch (value) { case "現在地": search_by = "location"; console.log("現在地") break; case "駅名": search_by = "station"; console.log("駅名") break; case "建物名": search_by = "name"; console.log("建物名") break; default: break; } const search_query = await this.getPosition(); console.log(search_query) // undefined になる fetch(`https://my-fucking-great-app/${search_by}?${search_query}`, { mode: 'cors', credentials: 'include', headers: { 'Content-Type': 'application/json', 'Accept': 'application/json' } }) .then(res => res.json()) .then( (result) => { this.setState({ data: result }); }, (error) => { this.setState({ data: error }); } ) } // いろんなとこにasync await 入れて試しまくったので、変な箇所があるかもしれません
自分の考えている挙動としては、const search_query = await this.getPosition();
の箇所で、search_query
が生成されるのを待ち、それが取得されたら、fetchが行われるというものです。
しかし、どうがんばってもsearch_query
の値がundefined
になってしまいます。まだまだ非同期処理周りの知識がなく、解決できません。
どなたか解決法をご教授いただければ幸いです。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/06/16 00:33