gpt4 book ai didi

javascript - 使回调等待直到函数在 Node js中返回结果

转载 作者:行者123 更新时间:2023-11-30 09:23:48 24 4
gpt4 key购买 nike

有一组文件需要处理。文件可能属于不同的类型,因此有不同的函数进行处理。我希望遍历所有文件,同时收集日志,最后返回一个存储所有日志的变量。

代码:

var file_list = req.body.filelist.split(','); //array of filenames
var logs = []; //logs about the file processing will be stored here

//iteration through each file
async.forEach(file_list , function(file_from_list , callback){
if(file_is_type1(file_from_list)){
process_filetype_1(file_from_list);
callback(null);
}
else if(file_is_type1(file_from_list)){
process_filetype_2(file_from_list);
callback(null);
}
else{
logs.push("Unknown file type");
}
},function(error, result){
return res.status(200).send({message: import_log});
});

有两个不同的函数处理文件的逻辑不同。这是一个复杂的代码,但运行流畅,每个 Action 都在正确的时间执行。这是其中一个函数的抽象:

function process_filetype_1(file_from_list){
async.auto({
dosth_1: function(callback) {
//logic implementation
},
dosth_2: ['dosth_1', function(callback) {
//logic implementation
}]
}, function(error, results) {
return results;
});
}

发生了什么:所有文件都已处理,但迭代内的回调不会等待函数完成执行。因此响应在文件处理完成之前发送

为什么会这样:调用 process_filetype_1(file_from_list) 和 callback(null) 是异步的。 callback(null) 首先完成,迭代所有文件,执行流程转到发送响应。与此同时,功能仍在执行。

如何修复: 还没弄明白。理想情况下,回调会在返回 null 之前等待函数返回它们各自的值(并完成执行)。

不能做什么:使用定时器让回调等待。正在处理的文件数量可以从 1 个到数百个,并且没有大小限制。处理每个文件可能花费的时间未知。

我尝试过的:函数完成执行时返回回调。将函数的返回值分配给变量(例如测试)并执行回调(测试)。没有一个工作。

最佳答案

你可以尝试这样的事情:

if(file_is_type1(file_from_list)){
process_filetype_1(file_from_list, callback);
}

然后 process_filetype_1 看起来像这样:

function process_filetype_1(file_from_list, callback){
async.auto({
dosth_1: function(cb) {
//logic implementation
},
dosth_2: ['dosth_1', function(cb) {
//logic implementation
}]
}, function(error, results) {
if(error) { callback (error);
} else {
callback(results);
}
});
}

关于javascript - 使回调等待直到函数在 Node js中返回结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50029409/

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