Hi Selvaraj,
Could you be a little more specific with your issue? Are you having trouble with QueryTask, zooming to a feature's extent in general? Or only in the SceneView (you get it to work in MapView)?
I was able to query features using this sample as a base. Here is my sample app in a jsbin: JS Bin - Collaborative JavaScript Debugging
Here are the highlights:
QueryTask - This module essentially works the same as it does in 3.x. The main difference is that it returns a Promise instead of a Deferred, so to get the features you need to use .then(). This also allows you to chain multiple functions, which makes your code easier to read. If you're not familiar with using Promises, I encourage to you read the Working with Promises page in our SDK.
ZoomTo - This can easily be done using the animateTo() method on the view. You can animate to a point, geometry, graphic, ViewPoint, and camera (only in SceneView). In my sample app, I passed in the first graphic returned from the query. You are supposed to be able to animate to an array of graphics or geometries, but I wasn't getting that to work properly in my app. That may be a bug, so I'll look in to it.
Here are the main lines of code you should focus on:
//Set base parameters of query
var q = new Query({
distance: 150, //get features within 150ft of mouse click
units: "feet",
returnGeometry: true,
spatialRelationship: "esriSpatialRelIntersects",
outFields: ["*"]
});
view.then(function(){
view.on("click", qFeatures);
});
//Executes a query task based on mouse click
function qFeatures(evt){
q.geometry = evt.mapPoint;
var qTask = new QueryTask({
url: featureLayer.url
});
qTask.execute(q).then(function(response){
return response.features;
}).then(highlightGraphics).then(zoomTo); //chain functions
}
var highlight = new SimpleMarkerSymbol({
color: "yellow",
size: 8,
outline: new SimpleLineSymbol({
color: "red",
width: 8
})
});
//highlight queried features
function highlightGraphics(graphics){
resultLayer.clear();
graphics.forEach(function(item, i){
item.symbol = highlight;
});
resultLayer.add(graphics);
return graphics;
}
//animateTo those features - This acts like a zoomToExtent method
function zoomTo(features){
view.animateTo({
target: features[0], //you should be able to pass the entire array here
scale: 1200
});
}
Does this help? This sample should work in a SceneView as well; although the FeatureLayer rendering doesn't perform great at the moment, but you still should be able to observe the animation to the graphics.