Tween Velocity

class Ship extends Phaser.Physics.Arcade.Sprite
{

    constructor (scene, x, y, points)
    {
        super(scene, x, y, 'ship', 2);

        scene.add.existing(this);
        scene.physics.add.existing(this);

        this.setScale(2);
        this.play('thrust');

        this.speed = 150;
        this.points = points;

        this.target;
        this.targetIndex = -1;

        this.isSeeking = true;

        this.seek();
    }

    seek ()
    {
        //  Pick a random target point
        const entry = Phaser.Utils.Array.GetRandom(this.points);

        this.target = entry;

        this.isSeeking = false;

        this.scene.tweens.add({
            targets: this.body.velocity,
            x: 0,
            y: 0,
            ease: 'Linear',
            duration: 500,
            onComplete: function (tween, targets, ship)
            {
                ship.isSeeking = true;
                ship.scene.tweens.add({
                    targets: ship,
                    speed: 150,
                    delay: 500,
                    ease: 'Sine.easeOut',
                    duration: 1000
                });
            },
            onCompleteParams: [ this ]
        });
    }

    preUpdate (time, delta)
    {
        super.preUpdate(time, delta);

        //  Is the ship within the radius of the target?
        if (this.target.contains(this.x, this.y))
        {
            this.seek();
        }
        else if (this.isSeeking)
        {
            const angle = Math.atan2(this.target.y - this.y, this.target.x - this.x);

            this.scene.physics.velocityFromRotation(angle, this.speed, this.body.velocity);
        }
    }

}

class Example extends Phaser.Scene
{
    preload ()
    {
        this.load.setBaseURL('https://cdn.phaserfiles.com/v385');
        this.load.spritesheet('ship', 'assets/games/lazer/ship.png', { frameWidth: 16, frameHeight: 24 });
    }

    create ()
    {
        this.anims.create(
            {
                key: 'thrust',
                frames: this.anims.generateFrameNumbers('ship', { frames: [ 2, 7 ] }),
                frameRate: 20,
                repeat: -1
            });

        const points = [
            new Phaser.Geom.Circle(100, 100, 32),
            new Phaser.Geom.Circle(400, 100, 32),
            new Phaser.Geom.Circle(700, 100, 32),
            new Phaser.Geom.Circle(100, 300, 32),
            new Phaser.Geom.Circle(400, 300, 32),
            new Phaser.Geom.Circle(700, 300, 32),
            new Phaser.Geom.Circle(100, 500, 32),
            new Phaser.Geom.Circle(400, 500, 32),
            new Phaser.Geom.Circle(700, 500, 32)
        ];

        const debug = this.add.graphics();

        debug.lineStyle(1, 0x00ff00);

        for (const p of points)
        {
            debug.strokeCircleShape(p);
        }

        this.graphics = this.add.graphics();

        this.ship = new Ship(this, 400, 300, points);
    }

    update ()
    {
        this.graphics.clear();
        this.graphics.fillStyle(0xff0000);
        this.graphics.fillRect(this.ship.target.x, this.ship.target.y, 4, 4);
    }
}

const config = {
    type: Phaser.AUTO,
    parent: 'phaser-example',
    width: 800,
    height: 600,
    pixelArt: true,
    physics: {
        default: 'arcade',
        arcade: {
            debug: true,
            gravity: { y: 0 }
        }
    },
    scene: Example
};

const game = new Phaser.Game(config);