lsongdev / lsongdev/node-escpos
Wrong function on network adapter close?
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
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- 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