【发布时间】:2023-04-11 04:00:02
【问题描述】:
我正在尝试在 node.js 中开发一个同步进程,并且我已经实现了async.series 方法,但是我实现的方式并没有像我预期的那样工作。我希望该系列的第二个函数在第一个函数终止后工作(包括循环的操作)。由于s3.getObject 是一个异步函数,我有点迷失了如何正确实现它。
恢复:我想在完成循环和循环内的函数后转到第二个函数。
async.series([
function(cback) {
console.log("first function series...");
for (var i = 0; i < jsonUsuariosPerfil.users.length; i++) {
var usuario = jsonUsuariosPerfil.users[i];
var paramsUsers = {
Bucket: 's3.....br/.../users/' + usuario.user,
Key: 'profiles',
};
console.log("loop jsonUsuariosPerfil... " + usuario.user);
s3.getObject(paramsUsers, function(err, data) {
if (err) {
console.log("Error: " + err);
const message = "Error getting user -> " + err;
console.log(message);
callback(message);
} else {
var jsonPerfisUsuario = JSON.parse(data.Body);
var removido = false;
console.log("found object..." + JSON.stringify(data.Body))
for (var i = 0; i < jsonPerfisUsuario.profiles.length; i++) {
var perfil = jsonPerfisUsuario.profiles[i];
if (perfil.profile == id_grupo) {
jsonPerfisUsuario.profiles.splice(i, 1);
removido = true;
break;
}
}
if (removido) {
var paramsPut = {
Bucket: 's3.....br/.../users/' + usuario.user,
Key: 'profiles',
Body: JSON.stringify(jsonPerfisUsuario)
};
console.log("removido, salvando profiles");
s3.putObject(paramsPut, function(err2, data2) {
if (err2) {
console.log("error putting the file:" + err2);
var erro = {
status: "ERROR_SAVING_FILE"
};
generalCallback(null, erro);
} else {
console.log("salvo arquivo dos profiles do usuario");
}
});
}
}
});
}
cback();
},
function(cback) {
console.log("second function series...");
removerGrupoCompleto();
}
], function(err) {
if (err) {
var error = {
status: "ERROR"
};
generalCallback(null, error);
}
});
正在发生的事情的日志:
pegou usuarios do perfil...
first function series...
loop jsonUsuariosPerfil... pedro@.....com.br
second function series..
非常感谢大家的帮助。
【问题讨论】:
-
你不只是因为...链接承诺?
-
嗨 Jared,我是 javascript/node.js 的初学者开发人员,我不知道这是什么.. 我会搜索更多关于“承诺”的信息,非常感谢!
-
为什么这被标记为 async-await?
-
@pedro.olimpio 没问题,我们在某个时候都是初学者:我直到 30 多岁才开始专业编程。但是,您确实需要学习的一件事是如何弄清楚问题的本质:在这种情况下,当您尝试了解如何构建异步代码时,请执行可行的最简单的异步操作。直接跳入并尝试解决实际问题很诱人,但请尝试训练自己首先制作一个最小的示例。
-
@JaredSmith 谢谢你的建议,我确实设法用最简单的实现解决了这个问题,并且没有必要使用
asyncpack。再次感谢您!
标签: javascript node.js async.js