[BUG]:network.open wrong error argument on callback in connect using bun

Ouverte
#439 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Évaluation

Difficulté
3/5
Temps estimé
1-2 jours
Accessibilité débutants
42/100
Type d'issue
Bug
Clarté
Plutôt claire
Activité
À l'abandon
Stack technique
bun, javascript, node.js
Domaine
networking

Piste de recherche

Commencez par localiser Network.prototype.open et comparer la gestion de son callback sous Node.js et Bun avec la reproduction incluse dans l’issue. Le travail est terminé lorsque le callback reçoit une valeur d’erreur cohérente lors d’un échec de connexion dans les deux runtimes ; réexécutez l’exemple présenté pour vérifier le comportement.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

bug
Description of the bug

Using bun, escpos-network behaves differently in the open method, specifically the error argument.

It is set to a Socket instance when using bun (1.1.45+196621f25), not using node (22.8.0)

I also opened a bug in bun.

Steps To Reproduce

I extracted the relevant code here and call both open (with a fix attempt) and open2 (current implementation in main). open2 fail with bun.

const net = require('net');
const EventEmitter = require('events');
const util = require('util');

function Network(address, port) {
  EventEmitter.call(this);
  this.address = address;
  this.port = port || 9100;
  this.device = new net.Socket();
  return this;
}

util.inherits(Network, EventEmitter);

Network.prototype.open = function(callback) {
  const self = this;

  this.device.on('error', (err) => {
    console.log('error', err);
    callback && callback(err, self.device);
  }).on('data', buf => {
    // console.log('printer say:', buf);
  }).connect(this.port, this.address, function(err) {
    if (err && err instanceof Error) {
      console.log('connect error', err);
      callback && callback(err, self.device);
      return;
    }
    self.emit('connect', self.device);
    callback && callback(null, self.device);
  });

  return this;
};

Network.prototype.open2 = function(callback){
    var self = this;
    this.device.on("error", (err) => {
      callback && callback(err, self.device);
    }).on('data', buf => {
      // console.log('printer say:', buf);
    }).connect(this.port, this.address, function(err){
      self.emit('connect', self.device);
      callback && callback(err, self.device);
    });
    return this;
  };

// Usage example
let  device = new Network('192.168.1.100', 9100);

device.open(function(error, device) {
  if (error) {
    console.log('Connection error open');
    return;
  }
  console.log('Connected to device open');
  device.end();
});
device = new Network('192.168.1.100', 9100);
device.open2(function(error, device) {
    if (error) {
      console.log('Connection error open2:');
      return;
    }
    console.log('Connected to device open2');
    device.end();
  });
Additional Information

No response

Langage dominant
TypeScript
Étoiles
1.6k
Forks
442
Métriques de merge des PR
Aucune PR mergée en 30 j

Préparer son environnement

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de lsongdev/node-escpos

Toutes les issues de lsongdev/node-escpos

Issues similaires

Plus d'issues TypeScript

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.