我基本上是在里面覆盖overwriteME.jpg
const screenshotDesktop = require('screenshot-desktop')
const sharp = require('sharp');
(async () => {
while (1 < 5){
var currentShot = screenshotDesktop.all()
.then(imgs => {
return fs.writeFile(`/Users/ga/proj/overwriteME.jpg`, imgs[0], (err) => {
if (err) throw err;
crop();
});
});
await delay(1000);
}
async function crop(crop){
// original size from metadata
var resizedImage = await sharp('/Users/ga/proj/overwriteME.jpg');
var metadata = await resizedImage.metadata();
console.log(metadata);
};
})();
function delay(timeout) {
return new Promise((resolve) => {
setTimeout(resolve, timeout);
});
}
我期望不同的元数据,因为我正在截取屏幕上播放的视频的屏幕截图并覆盖 overwriteME.jpg,并使用 Sharp 提取元数据。
实际发生的情况是返回相同的元数据,而我认为 Sharp 会反射(reflect)文件更改。
不知何故,文件正在发生变化,但是当敏锐地读取它时,它从一开始就引用了同一张旧图片。
最佳答案
在没有 await
的情况下,您可能会遇到混合原始 Promise 的竞争条件和await
-ing。尝试更换= screenshotDesktop.all()
与 = await screenshotDesktop.all()
。您还可以使用 await
简化代码排他性(顺便说一下,不确定 while (1 < 5)
是什么意思):
'use strict';
const fs = require('fs').promises;
const screenshotDesktop = require('screenshot-desktop');
const sharp = require('sharp');
(async () => {
while (1 < 5) {
const imgs = await screenshotDesktop.all();
await fs.writeFile('/Users/ga/proj/overwriteME.jpg', imgs[0]);
await crop();
}
})();
async function crop() {
const resizedImage = await sharp('/Users/ga/proj/overwriteME.jpg');
const metadata = await resizedImage.metadata();
console.log(metadata);
}
关于javascript - Node.js:读取被覆盖的图片,仅引用初始图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54621670/