如何在 fs.stat 回调中 运行 一个函数

How to run a function in a fs.stat callback

我正在使用 npm papercut https://www.npmjs.com/package/papercut 上传图片,这是保存图片的功能(完美)。

uploader.process('image1', file.path, function(images){
  console.log(images.avatar); // '/images/uploads/image1-avatar.jpg'
  console.log(images.small); // '/images/uploads/image1-small.jpg'
})

我正在使用文件系统模块方法 fs.stat,我想创建一个目录,我希望 fs.stat 回调中的 uploader.process 到 运行。所以保存的图像进入 fs.stat 创建的目录。这是我到目前为止的代码,我不知道将 uploader.process 函数放在哪里,所以回调会调用它。

fs.stat(`${tenantId}/`, function (err, stats){
  if (err) {
    // Directory doesn't exist or something.
    console.log('Folder doesn\'t exist, so I made the folder ' + `${tenantId}/`);
    return fs.mkdir(`assets/${tenantId}`, callback);
  }
  uploader.process('image1', file.path, function(images){
   console.log(images.avatar); // '/images/uploads/image1-avatar.jpg'
   console.log(images.small); // '/images/uploads/image1-small.jpg'
  })

});

你有两个选择,让你的调用同步。或者使用承诺。 (也许您还有其他选择,但我希望这些对您有所帮助)。

// Synchronous way

// Check for node docs: https://nodejs.org/api/fs.html#fs_fs_statsync_path
const stats = fs.statSync(`${tenantId}/`);

// Check for stats class def: https://nodejs.org/api/fs.html#fs_class_fs_stats
if (!stats.isDirectory()) {
  // Node docs: https://nodejs.org/api/fs.html#fs_fs_mkdirsync_path_mode
  fs.mkdirSync(`assets/${tenantId}`);
}

uploader.process('image1', file.path, function(images){
   console.log(images.avatar); // '/images/uploads/image1-avatar.jpg'
   console.log(images.small); // '/images/uploads/image1-small.jpg'
});

// Async way

fs.stat(`${tenantId}/`, (err, stats) => {
  const localPromise = new Promise((resolve, reject) => {
    if (err) {
      fs.mkdir(`assets/${tenantId}`, () => { resolve(true) });
    }
    resolve(true);
  });
  
  localPromise.then(result => {
    uploader.process('image1', file.path, function(images){
     console.log(images.avatar); // '/images/uploads/image1-avatar.jpg'
     console.log(images.small); // '/images/uploads/image1-small.jpg'
  });
  });
});

检查文档,可能你应该 try/catch 两种情况下的 mkdir async/sync。