【发布时间】:2016-09-24 07:17:10
【问题描述】:
我正在设置一个节点应用程序,我必须按顺序运行一系列异步生成任务,因此我设置了一个队列系统。当它没有出现错误时,它运行良好。但是,它无法捕获错误并在它们发生时记录它们。这是我现在的位置:
function queue(tasks) {
let index = 0;
const runTask = (arg) => {
if (index >= tasks.length) {
return Promise.resolve(arg);
}
return new Promise((resolve, reject) => {
tasks[index++](arg).then(arg => resolve(runTask(arg))).catch(reject);
});
}
return runTask();
}
function customSpawn(command, args) {
return () => new Promise((resolve, reject) => {
const child = spawn(command, args, {windowsVerbatimArguments: true});
child.on('close', code => {
if (code === 0) {
resolve();
} else {
reject();
}
});
});
}
队列是这样构建和执行的:
myqueue.push(customSpawn('cmd.exe', ['/c', convertpath, filelist[i], '-interlace', 'line', '-chop', croppixels, '-resize', '300', outfile]));
queue(myqueue).then(([cmd, args]) => {
console.log(cmd + ' finished - all finished');
}).catch(function(error) {
console.error(error.stack);
});
抛出以下错误:
Uncaught (in promise) TypeError: undefined is not a function(…)
【问题讨论】:
-
你想用
.catch(TypeError, function(e) {})实现什么?这不是有效的 JavaScript,.catch接受一个参数。 -
哦。这是一个疏忽。让我用一个参数来试试。
-
已修复,但仍然出现同样的错误
标签: node.js promise queue spawn