gpt4 book ai didi

javascript - promise 创建中的 "this"是什么?

转载 作者:行者123 更新时间:2023-11-30 11:17:55 26 4
gpt4 key购买 nike

<分区>

有一个名为 pngjs-draw 的 github 包将图元绘制到 png 上。正是我所需要的,但我希望它与其他使用 promise 的异步代码一起运行。我正在尝试这样做,遇到了一些我不了解“这个”的事情。来自 github 的 pngjs-draw 示例代码看起来像这样......

var fs = require('fs');
var drawing = require('pngjs-draw');
var png = drawing(require('pngjs').PNG);

fs.createReadStream("blue.png")
.pipe(new png({ filterType: 4 }))
.on('parsed', function() {
// Draws a pixel with transparent green
this.drawPixel(150,200, this.colors.black())
// more examples snipped
// Writes file
this.pack().pipe(fs.createWriteStream('blue.out.png'));
});

它在“parsed”函数中使用“this”,this 似乎是具有所有绘图方法的实例。

我想制作一个更通用的版本,除了返回 promise 、处理错误等。但似乎我在创建 promise 时不能以相同的方式使用“this”。这是我的尝试...

function drawOnPNG(fileIn, fileOut, drawFunction) {
return new Promise((resolve, reject) => {
fs.createReadStream(fileIn).pipe(new png({ filterType: 4 })).on('parsed', () => {
drawFunction(this); // <--MY PROBLEM, I THINK
this.pack().pipe(fs.createWriteStream(fileOut)).on('finish', () => resolve()).on('error', error => reject(error));
}).on('error', error => reject(error));
});
}

我认为像这样制作绘图功能会很方便......

function someDrawFunction(pngThing) {
pngThing.drawPixel(150,200, this.colors.black());
}

然后我可以这样画...

drawOnPNG('fileIn.png', 'fileOut.png', someDrawFunction).then(...

但是,当它执行时,pngThing 并不是我所希望的。用调试器检查它,它是一个非常大的对象,上面似乎定义了所有 JS 类。你能建议一种在 promise 创建中访问绘图对象的方法吗?

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com