gpt4 book ai didi

javascript - 如何按顺序执行 Node JS 函数

转载 作者:行者123 更新时间:2023-12-01 15:51:40 31 4
gpt4 key购买 nike

我的 route 有多个功能,并且想要执行它们以便例如,如果前一个功能已成功执行,控件应该只移动到下一个功能。例如,引用下面的代码,我希望先执行 task1,然后执行 task 2,依此类推。设置超时或等待似乎不是一种有效的方法,我是否需要添加异步函数或类似的东西?

代码.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);
}
});

最佳答案

首先将每个任务变成一个返回一个promise的函数:

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
}
}

关于javascript - 如何按顺序执行 Node JS 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61651157/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com