创建后检查文件。 FS +超时?

时间:2013-11-28 13:31:28

标签: node.js express

在ajax请求之后,我发送Image Magick(子进程)的选项并创建文件。 如果我立即向客户发送回复 - 我有错误 - img不存在。我的解决方案,设置超时并发送响应(硬编码)。 我可以用fs模块设置超时和检查文件,但这是正确的方法吗? 或者可能是我可以在文件存在后发出新事件,但是你可以为我输入样本吗? 或者这个任务有另一个解决方案

fs.stat(currentImage, function(err, background) {

        if (background && background.isFile) {

            async.series([
                function(callback) {
                    var magickOpts = memOptions;
                    var im = spawn('convert', magickOpts);
                    callback(null, 'done');
                }
            ],
            function(err, result) { 
                setTimeout(function() {
                    res.send({
                        status: '200',
                        src: '/images/mems/'+tempName+'.jpg',
                        tempName: tempName
                    }); 
                }, 500);
            });

        } else {
            res.send({
                status: '404',
                text: 'background image not found'
            });
        }

    });

1 个答案:

答案 0 :(得分:1)

在将响应发送给客户端之前,您应该等待子进程退出(通过侦听close事件)。

此外,在这种情况下似乎并未使用async.series,所以我将其排除在外:

fs.stat(currentImage, function (err, background) {

  if (background && background.isFile) {
    var magickOpts = memOptions;
    var im = spawn('convert', magickOpts);
    im.on('close', function() { 
      res.send({
        status: '200',
        src: '/images/mems/' + tempName + '.jpg',
        tempName: tempName
      });
    });
  } else {
    res.send({
      status: '404',
      text: 'background image not found'
    });
  }

});

顺便说一下,还有im包裹,它包装ImageMagick以便在Node中使用。