gpt4 book ai didi

javascript - JS : Recursively calling a promise function

转载 作者:搜寻专家 更新时间:2023-11-01 00:50:14 24 4
gpt4 key购买 nike

我正在制作一个可以为图像创建缩略图的 node.js 应用程序。为了避免在生成缩略图时卡住应用程序,我决定使用异步 library用于创建缩略图。但是,根据图像的不同,可能需要多个缩略图尺寸。

var thumbnailSizes = [100];
if (image.type == 'coolImage') thumbnailSizes.push(500);
generateThumbnails(image.filename, thumbnailSizes).then(function() {
// Do cool things with the saved thumbnails (This is never reached)
});

function generateThumbnails(filename, thumbnailSizes) {
return new Promise(resolve => {
var path = filename.substring(0, filename.lastIndexOf('\\'));
console.log('start');
console.log('length = ' + thumbnailSizes.length);
thumb({
prefix: thumbnailSizes[0] + '_';
source: filename,
destination: path,
width: thumbnailSizes[0]
}).then(function () {
if (thumbnailSizes.length > 1) {
console.log('next');
generateThumbnails(filename, thumbnailSizes.splice(0, 1));
} else {
console.log('finished');
resolve('true');
}
}).catch(function (e) {
console.log('error');
});
console.log('end');
});
}

此代码成功创建了第一个缩略图,但没有创建第二个。这是代码停止运行后我的控制台的样子。

> Console Output
start
length = 2
end
next
start
length = 1
end

代码第二次调用 generateThumbnails() 成功,但没有再次调用 thumb 函数,跳到最后,永远不会解析。我怎样才能使它工作?

最佳答案

我不认为这里需要递归。

async function generateThumbnails(filename, thumbnailSizes) {
var path = filename.substring(0, filename.lastIndexOf('\\'));

return await Promise.all(thumbnailSizes.map(size => thumb({
prefix: `${size}_`,
source: filename,
destination: path,
width: size
})));
}

或者如果您需要一张一张地创建缩略图:

async function* generateThumbnails(filename, thumbnailSizes) {
var path = filename.substring(0, filename.lastIndexOf('\\'));
for(const size of thumbnailSizes) {
yield await thumb({
prefix: `${size}_`,
source: filename,
destination: path,
width: size
});
}
}

可在调用函数中使用 for await 循环:

for await(const thumbnail of generateThumbnails(file, sizes) {
// handle single size
}

此外,我不会使用 .substring() 进行路径操作,我确信 Node path module有一个或七个函数可以帮助您可靠地从路径中提取有趣的部分。

关于javascript - JS : Recursively calling a promise function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53031226/

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