function flyTo(location, view, done) { const duration = 2000; const zoom = view.getZoom(); let parts = 2; let called = false; function callback(complete) { --parts; if (called) { return; } if (parts === 0 || !complete) { called = true; done(complete); } } view.animate( { center: location, duration: duration, }, callback, ); view.animate( { duration: duration / 2, zoom: zoom - 1, }, { duration: duration / 2, zoom: zoom, }, callback, ); } export default flyTo;