gpt4 book ai didi

javascript - promise 没有得到解决,尽管它被等待

转载 作者:行者123 更新时间:2023-11-29 23:06:37 25 4
gpt4 key购买 nike

我想从一些图像中获取像素并将它们作为数组返回。对于图像处理,我使用 https://www.npmjs.com/package/jimp . Jimp 有一个异步函数 jimp.read(filePath)这需要等待处理。我的图像阅读器模块:

const config = require('./configuration.json');
const fs = require('fs');
const path = require('path');
const jimp = require('jimp');

module.exports = readImages;

function readImages() { // Reads the image files and extracts the colors
const files = getFilesFromDirectory();
const imageFiles = filterForImageFiles(files);
return getInformationFromImageFiles(imageFiles);
}

function getFilesFromDirectory() { // Reads all the files from the directory provided from the configuration file
return fs.readdirSync(config.dirPath);
}

function filterForImageFiles(files) { // Filters an array of files for .png and .jpg files
return files.filter(file => {
const fileExtension = path.extname(file);
const isPngFile = fileExtension === '.jpg';
const isJpgFile = fileExtension === '.png';
return isPngFile || isJpgFile;
});
}

function getInformationFromImageFiles(imageFiles) { // Maps image files to image information
return imageFiles.map(imageFile => getInformationFromImageFile(imageFile));
}

async function getInformationFromImageFile(imageFile) { // Extracts information from an image file
const filePath = path.join(config.dirPath, imageFile);
const image = await jimp.read(filePath);
return getColorsFromImage(image);
}

function getColorsFromImage(image) { // Extracts the colors from an image file
const { width, height } = image.bitmap;
const colors = [,];
for (let x = 0; x < width; x++) {
for (let y = 0; y < height; y++) {
const intColor = image.getPixelColor(x, y);
const rgbaColor = jimp.intToRGBA(intColor);
colors[x, y] = rgbaColor;
}
}
return colors;
}

当我运行代码时,我收到一个包含两个项目的数组(因为我提供了两个图像)。两者都是 Promise { <pending> } .请看getInformationFromImageFile这是一个async等待 jimp 阅读器的功能。

为什么它返回一个 promise 而不解决它?我是否必须等待每个函数和整个模块......?

最佳答案

由于 getInformationFromImageFile 被标记为 async 它将返回一个 Promise 因此必须等待它。你需要在它被调用的地方await。这些更改应该可以修复它:

async function getInformationFromImageFiles(imageFiles) {
const imageInfos = [];
for (let i = 0; i < imageFiles.length; i++) {
const imageFile = imageFiles[i];
imageInfos.push(await getInformationFromImageFile(imageFile));
}

return imageInfos;
}

async function readImages() {
const files = getFilesFromDirectory();
const imageFiles = filterForImageFiles(files);
return await getInformationFromImageFiles(imageFiles);
}

关于javascript - promise 没有得到解决,尽管它被等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54617695/

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