Node.js的:读取该被覆盖的图片,引用初始图像只
我基本上覆盖内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,并采用了夏普提取元数据。
实际发生的事情正在返回相同的元数据,当我以为锐将反映文件的变化。
不知怎的,该文件被改变,但是当锋利的读取它,它引用在年初的方式相同的老照片。
回答如下:你可能有一个竞争条件不混合和await
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);
}