前提・実現したいこと
Leafletを用いて、マップを描画し、クリックイベントを実装しています。
クリックイベントでは、ajax通信にて、pythonでデータベースの更新、参照を行い、javascriptにて、扱っています。
概略の実現したいことを以下に記述します。(わかりにくいかもしれません、すみません)
A()→データベースaの内容Aを内容Bに更新
B()→データベースaの内容を参照
A(),B()をクリックイベント関数内にて、実装した時に、
B()で、データベースaの内容Bを参照したいのですが、内容Aを参照している状況です。
以下の自分のソースコードでは、postVisitedNode()の処理が完了次第(レスポンス返答後)、achievement_rate()の処理を行いたいです。
該当のソースコード
javascript
1一部省略しているところがあります。(レイヤーやオプションなど) 2onEachNodeFeature = function(feature, layer) { 3 layer.on('click', function(e) { 4 let visited = e.target.feature.properties.visited 5 postVisitedNode(visited.node_id);//隣接ノード描画 6 achievement_rate();//達成率の更新 7 L.DomEvent.stopPropagation(e); 8 }) 9} 10 11function showVisitedListLayer(geojson) { 12 // visitedListLayer上のマーカをクリアする. 13 if (visitedListLayer != null) { 14 mymap.removeLayer(visitedListLayer); 15 } 16 17 // マーカを生成する. 18 visitedListLayer = L.geoJSON(geojson, { 19 pointToLayer: function(feature, latlng) { 20 switch (feature.properties.visited.state) { 21 case 2: return L.circleMarker(latlng, visitedMarkerOptions); 22 case 1: return L.marker(latlng, {icon:pulsingIcon2}); 23 case 0: return L.circleMarker(latlng, unvisitedMarkerOptions); 24 } 25 }, 26 onEachFeature: onEachNodeFeature, 27 }); 28 // マップレイヤにvisitedListLayerを追加する. 29 visitedListLayer.addTo(mymap); 30} 31 32function postVisitedNode(node_id) { 33 $.ajax({ 34 url: 'visit/', 35 method: 'GET', 36 data: { 37 'node_id': node_id, 38 }, 39 timeout: 10000, 40 dataType: "json", 41 }).done(function(response) { 42 let geojson = response; 43 showVisitedListLayer(geojson); 44// console.log(geojson); 45 }).fail(function(response) { 46 window.alert('postVisitedNode() : レスポンス失敗'); 47 }); 48} 49 50function achievement_rate() { 51 $.ajax({ 52 url: 'achievement_rate/', 53 method: 'GET', 54 data: { 55 }, 56 timeout: 10000, 57 dataType: "json", 58 }).done(function(response) { 59 let geojson = response; 60 showachievementLayer(geojson); 61// console.log(geojson); 62 }).fail(function(response) { 63 window.alert('achievment_rate() : レスポンス失敗'); 64 }); 65}
試したこと
非同期通信になっているのは、ajax通信を用いている、API通信を用いている、のどちらかだとおもうのですが、、、
完了を待つ方法として、promise,async/awaitを使う方法があるのは分かったのですが、
クリックイベント内(onEachFeatureオプション内)にて上手く実装することができませんでした。
ご教授していただけたら幸いです。
補足情報(FW/ツールのバージョンなど)
leaflet1.7.1
python3.7
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。