lsongdev / lsongdev/node-escpos

Wrong function on network adapter close?

Open
#424 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
TypeScript
Stars
1.6k
Forks
443
PR merge metrics
No merged PRs in 30d

Description

First of all, I am just a hobby programmer :)

So basically this is my function.
I have an order which has many order_pos. From the order_pos i can get the corresponding printer (different item different printer)
For your information, i am generating an image which is printed. So i dont have to worry about encoding (like my names show) can print all fonts I want and all sizes I want.
But this is just a side note.
```
static async printOrder(order: Order) {
PrintingService.splitOrderToPrintRequest(order).then(pr => {
for (let printerInfo of pr) {
(new Network(printerInfo.printerAddress)).open((x, device) => {
PrintingService.getOrderFromIDAndPrinters(order.id, printerInfo.id).then(realOrder => {
if (!realOrder) {
throw new Error("Order is null")
}
try {
// @ts-ignore
const printer = new Printer(device, { encoding: "cp437" })
printer.image(new fickEncodings(realOrder, false).toImage()).then(p => {
p.cut;
p.close()
})
}
catch (err) {
console.log(err)
}
})

})
}
})
}
```
You can see i am using the inteded way in the function. But i get following error.

```
node_modules\@node-escpos\core\dist\index.cjs:1167
return new Promise((resolve, reject) => {
^
TypeError: this.adapter.close is not a function
```
with a `console.log(p)` in runtime I did see that **THE ADAPTER** has no `close()` instead there is an `end()`
So I tried changing this part
```
async close(...closeArgs) {
await this.flush();
return new Promise((resolve, reject) => {
this.adapter.close((error) => {
if (error)
reject(error);
resolve(this);
}, ...closeArgs);
});
}
```
to this:
```
async close(...closeArgs) {
await this.flush();
return new Promise((resolve, reject) => {
this.adapter.end((error) => {
if (error)
reject(error);
resolve(this);
}, ...closeArgs);
});
}
```

So i dont know if this is happening to any of you. But with this change its working for me.
plus: i dont have any problems with Too much requests, the printjobs will just wait and print after each other. Magic..

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start in node_modules/@node-escpos/core/dist/index.cjs at the close implementation and compare the adapter API shown in the issue. Reproduce the adapter-close failure, then verify the network adapter can be closed through its available method without breaking flush or error handling. Done means closing a printer connection works without this TypeError.

Written by the indexing model from the issue text.

Assessment

Tech stack
node.js, typescript
Domain
embedded-iot, networking
Issue type
Bug
Difficulty
2/5
Estimated time
1-3 hours
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.