在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'
});
}
});
答案 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中使用。