函数"/>
我如何依次执行Node JS函数
我的路线中有多个功能,并且想要执行这些功能,例如,仅在成功执行前一个功能的情况下,控件才应移至下一个功能。例如,请参见下面的代码,我希望先执行task1,然后执行任务2,依此类推。设置超时或等待似乎不是一种有效的方法,我是否需要添加异步功能或类似功能?
Code.js
var task1 = cp.exec('docker images', function (error, stdout, stderr) {
console.log('Version: ' +version);
console.log('stdout: ' + stdout);
console.log('stderr: ' + stderr);
if (error !== null) {
console.log('exec error: ' + error);
}
});
var task2 = cp.exec('docker pull mongo:'+version, function (error, stdout, stderr) {
console.log('stdout: ' + stdout);
console.log('stderr: ' + stderr);
if (error !== null) {
console.log('exec error: ' + error);
}
});
var task3 = cp.exec('docker run -d -p '+port2+':27017 -v '+volumeLoc+' --name '+containerName+' mongo:'+version, function (error, stdout, stderr) {
console.log('stdout: ' + stdout);
console.log('stderr: ' + stderr);
if (error !== null) {
console.log('exec error: ' + error);
}
});
var task4 = cp.exec('docker ps | grep mongo', function (error, stdout, stderr) {
console.log('stdout: ' + stdout);
console.log('stderr: ' + stderr);
if (error !== null) {
console.log('exec error: ' + error);
}
});
回答如下:首先将每个任务转换为可返回承诺的函数:
function task1() {
let resolve, reject;
const promise = new Promise((rs, rj) => { resolve = rs; reject = rj; });
cp.exec('docker images', function (error, stdout, stderr) {
console.log('Version: ' +version);
console.log('stdout: ' + stdout);
console.log('stderr: ' + stderr);
if (error !== null) {
console.log('exec error: ' + error);
reject(error);
} else {
resolve();
}
});
return promise;
}
然后将它们全部包装在异步函数中:
async function main() {
try {
await task1();
await task2();
} catch (err) {
// handle error here
}
}
更多推荐
我如何依次执行Node JS函数
发布评论