我在這里要做的是在用節點調整大小后撰寫一個影像檔案,然后我將使用它來上傳它。但是當我寫它時,我的上傳代碼從那時開始并且檔案仍然沒有被寫入。
async function getdataFromJimpSmall(image,filePath,FILE_NAME){
try{
var isSucess = false ;
const im = await Jimp.read(image);
return new Promise((resolve, reject) => {
try{
im.resize(150, 215, Jimp.RESIZE_BEZIER, function(err){
if (err) throw err;
});
im.write(filePath FILE_NAME)
resolve(true)
}
catch(err){
console.log(err);
reject(false);
}
})
}
catch(err){
console.log('getdataFromJimpSmall Err====>' err)
return false
}
}
我嘗試使用它,但它領先于我的代碼,它從這里開始并且從這里被呼叫。
isThumbnailUrlavailable = await jimpController.imageCoverJimpAndUploadToS3small(getISBNBook, "[email protected]", "SaleIsbn")
isThumbnailUrlavailableMedium = await jimpController.imageCoverJimpAndUploadToS3medium(getISBNBook, "[email protected]", "SaleIsbn")
而第一個函式imageCoverJimpAndUploadToS3small () 是這樣的:
exports.imageCoverJimpAndUploadToS3small = async (getContent,email,file) =>{
try{
var elementType = 15;
var filePath = path.join(__dirname, '../../uploads/t/')
var FILE_NAME = `${getContent.contentMetaDataRef.isbn}_s.jpg`
var image = getContent.thumbnail
let tempdata = await getdataFromJimpSmall(image,filePath,FILE_NAME)
console.log('temp - ', tempdata);
if(tempdata==true)
{
var data = await commonController.uploadthumbnailTOPublicS3(filePath, FILE_NAME)
console.log('s3', data);
requestImageSize(data.url).then(size =>
{
console.log(size);
if(size.height>0&&size.width>0)
{
tempdata=true;
const getContentElement = ContentElement.findOne({contentId: getContent._id,elementType,elementData: data.keyName}).lean()
if(getContentElement){
ContentElement.findByIdAndUpdate(getContentElement._id, {
createdOn: Date(), modifiedOn: Date(),
}, { new: true })
}
else
{
return tempdata;
}else
{
tempdata=false;
return tempdata;
}
}).catch(err =>
{
console.error(err);
tempdata=false;
return tempdata;
});
}
}
catch(error){
console.log(error)
tempdata=false;
return tempdata;
}
}
但它不作業......
我再次呼叫imageCoverJimpAndUploadToS3small () 并在此之后開始。
uj5u.com熱心網友回復:
根據檔案https://www.npmjs.com/package/jimp#writing-to-files-and-buffers,.write異步運行并接受回呼,這就是承諾在寫入影像之前解決的原因
所以,你需要使用回呼,并從那里解決:
im.write(filePath FILE_NAME, (err)=>{
if(err) throw err;
resolve(true);
});
或者,正如檔案所說,您可以使用和 await .writeAsync,它是基于承諾的:
await im.writeAsync(filePath FILE_NAME);
resolve(true);
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/442582.html
