当尝试写入图像文件时,它会向前移动并延迟写入

When trying to write image file it moves ahead and write works late

我想在这里做的是在用节点调整大小后写一个图像文件,然后我将用它来上传它。但是当我写它的时候我的上传代码开始了,文件还没有写。

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, "-@gmail.com", "SaleIsbn")
        isThumbnailUrlavailableMedium = await jimpController.imageCoverJimpAndUploadToS3medium(getISBNBook, "-@gmail.com", "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() 并在那之后开始。

根据文档 https://www.npmjs.com/package/jimp#writing-to-files-and-buffers.write 异步运行并接受回调,这就是承诺在写入图像之前解析的原因

所以,你需要使用回调,并从那里解决:

im.write(filePath+FILE_NAME, (err)=>{
    if(err) throw err;
    resolve(true);
});

或者,如文档所述,您可以使用并等待 .writeAsync,即 promise-based:

await im.writeAsync(filePath+FILE_NAME);
resolve(true);