TS/JS Promise concurrency Frage



  • Hallo Leute,

    (zu aller erst, ich habe kaum Erfahrung mit JS/TS also bin für konstruktive Kritik was Code design angeht offen 🙂 )

    ich möchte ein Tcp Request=> Response Mechanismus implementieren, dazu verwendet ich Net.Socket
    und habe ein stehende Verbindung, und mache folgendes:

    public Command(data: CommandRequest, timeout: number|undefined = undefined) : Promise<CommandResponse>
     {
       return new Promise<CommandResponse>(
         (resolve) => {
    
           try 
           {       
             this._socket.once("data",(data)=> resolve(`resolve ${data}`));
    
             this._socket.once("error",(error) => resolve(error));       
           
             if(!this._socket.write(data))
               resolve(new Error(`Could not send data ${data}`))
           } 
           catch (e) 
           {
             resolve(new Error(`Inner Exception (${data})`));
           }
         })
         .then(() => new Promise<CommandResponse>(resolve => setTimeout(()=> resolve(new Error(`Timeout`)), timeout ?? 10000)))
         .catch(() => {
                // this.destroy();
                 return new Error(`Exception (${data})`);
             }
         );
     }
    

    hier der aufruf:

    let c = ... tcpclient ...

    c?.Command("SendB").then(r=> console.log(`command response ${r}`))
    

    die daten werden gesendet, aber der "data" handler wird nich aufgerufen!? kann es sein dass es hier ein concurrency Problem vorliegt, dass der "data" handler erst nach dem senden registried wird?

    Oder ist an sich die Implementierung nicht ideal;)

    Danke schonmal



  • ok ok.. die zeile mit meinem timeout ist mist an der stelle

    .then(() => new Promise<CommandResponse>(resolve => setTimeout(()=> resolve(new Error(`Timeout`)), timeout ?? 10000)))
    

    sorry.. jetzt klappt es soweit

    aber dennoch sehr gern konstruktive Kritik willkommen;)


Anmelden zum Antworten