我想在Node JS应用程序中通过node-cmd调用一系列python脚本。它们彼此依赖,所以我不能并行执行它们。我也不能使用固定的等待时间,因为它们总是有不同的执行时间。现在,在调用我的代码时,所有脚本都被同时调用,因此会出错...请参见我的代码:
pythoncaller: function(req, callback) {
var cmd=require('node-cmd');
cmd.get(`python3 first.py`,
function(err, data, stderr){
console.log(err);
console.log(stderr);
console.log(data);
});
cmd.get(`python3 second.py`,
function(err, data, stderr){
console.log(err);
console.log(stderr);
console.log(data);
});
cmd.get(`python3 third.py"`,
function(err, data, stderr){
console.log(err);
console.log(stderr);
console.log(data);
});
cmd.get(`python3 last.py"`,
function(err, data, stderr){
console.log(err);
console.log(stderr);
console.log(data);
callback(data);
});
},
您知道如何不并行执行那些脚本的解决方案吗?
您可以承诺回调样式函数,并使用.then
一个接一个地执行它们。像这样的东西
const cmd = require('node-cmd');
const Promise = require("bluebird");
const getAsync = Promise.promisify(cmd.get, { multiArgs: true, context: cmd });
var cmd = require('node-cmd');
getAsync(`python3 first.py`)
.then(data => console.log(data))
.then(() => getAsync(`python3 second.py`)
.then(data => console.log(data))
.then(() => getAsync(`python3 third.py"`)
.then(data => console.log(data))
.then(() => getAsync(`python3 last.py"`)
.then(data => console.log(data));
node-cmd
自述文件中也提到过。看到这里-https://www.npmjs.com/package/node-cmd#with-promises
根据文档,您可以承诺cmd.get
。
用下面的.then
代替await
// copy pasted
// either Promise = require('bluebird') or use (require('util').promisify)
const getAsync = Promise.promisify(cmd.get, { multiArgs: true, context: cmd })
pythoncaller: async function(req, callback) {
try {
let data
data = await getAsync(`python3 first.py`)
data = await getAsync(`python3 second.py`)
data = await getAsync(`python3 third.py"`)
// ...
} catch (e) {
return callback(e)
}
return callback()
}