यहाँ मेरी स्थिति है:
- on.handleFormSubmit () मैं इसे निष्पादित कर रहा हूं। ssetState ()
- this.handleFormSubmit () के अंदर, मैं इसे कॉल कर रहा हूं .findRoutes (); - जो इस के सफल समापन पर निर्भर करता है। शुरू ()
- this.setState (); इससे पहले पूरा नहीं होता है ।findRoutes कहा जाता है ...
- मैं इस के लिए प्रतीक्षा कैसे करूँ। इस.हेडस्ट्रीमैट () के अंदर शुरू करें। यह कॉल करने से पहले समाप्त करें।
एक सबपर समाधान:
- इस को डाल रहे हैं।
- यह स्वीकार्य नहीं है क्योंकि असंबंधित खोज () फ़ंक्शन से अधिक राज्य परिवर्तन होंगे। जब असंबंधित स्थिति को अद्यतन किया जाता है, तो मैं findRoutes () फ़ंक्शन को ट्रिगर नहीं करना चाहता।
कृपया नीचे कोड स्निपेट देखें:
handleFormSubmit: function(input){
// Form Input
this.setState({
originId: input.originId,
destinationId: input.destinationId,
radius: input.radius,
search: input.search
})
this.findRoutes();
},
handleMapRender: function(map){
// Intialized Google Map
directionsDisplay = new google.maps.DirectionsRenderer();
directionsService = new google.maps.DirectionsService();
this.setState({map: map});
placesService = new google.maps.places.PlacesService(map);
directionsDisplay.setMap(map);
},
findRoutes: function(){
var me = this;
if (!this.state.originId || !this.state.destinationId) {
alert("findRoutes!");
return;
}
var p1 = new Promise(function(resolve, reject) {
directionsService.route({
origin: {'placeId': me.state.originId},
destination: {'placeId': me.state.destinationId},
travelMode: me.state.travelMode
}, function(response, status){
if (status === google.maps.DirectionsStatus.OK) {
// me.response = response;
directionsDisplay.setDirections(response);
resolve(response);
} else {
window.alert('Directions config failed due to ' + status);
}
});
});
return p1
},
render: function() {
return (
<div className="MapControl">
<h1>Search</h1>
<MapForm
onFormSubmit={this.handleFormSubmit}
map={this.state.map}/>
<GMap
setMapState={this.handleMapRender}
originId= {this.state.originId}
destinationId= {this.state.destinationId}
radius= {this.state.radius}
search= {this.state.search}/>
</div>
);
}
});