gpt4 book ai didi

node.js - async.series 的简单实现是什么?

转载 作者:搜寻专家 更新时间:2023-10-31 23:39:12 24 4
gpt4 key购买 nike

我有两个功能:

function one(next){
Users.find({}, function(err, docs){
if( err)
next( err );
} else {
next( null );
}
});
}

function two(next){
Something.find({}, function(err, docs){
if( err)
next( err );
} else {
next( null );
}
});
}

我可以使用异步库:

async.series( [one, two], function( err ){
...
});

这里,如果 one() 返回错误,则立即调用回调(设置错误)。async.series 的简单基本实现是什么?我查看了库 async 的代码(这太棒了),但它是一个旨在做很多事情的库,我在理解它时遇到了真正的麻烦。

你能告诉我一个简单的 async.series 实现吗?它会简单地一个接一个地调用函数,并且——如果其中一个函数调用回调时出现错误——是调用设置了 err 的最终回调吗?

谢谢...

雇佣兵。

最佳答案

一个实现是这样的:

 function async_series ( fn_list, final_callback ) {
// Do we have any more async functions to execute?
if (fn_list.length) {
// Get the function we want to execute:
var fn = fn_list.shift();
// Build a nested callback to process remaining functions:
var callback = function () {
async_series(fn_list,final_callback);
};
// Call the function
fn(callback);
}
else {
// Nothing left to process? Then call the final callback:
final_callback();
}
}

以上代码不处理结果或错误的处理。要处理错误,我们可以简单地检查回调中的错误条件,并在出错时立即调用最终回调:

 function async_series ( fn_list, final_callback ) {
if (fn_list.length) {
var fn = fn_list.shift();
var callback = function (err) {
if (err) {
final_callback(err); // error, abort
}
else {
async_series(fn_list,final_callback);
}
};
fn(callback);
}
else {
final_callback(null); // no errors
}
}

可以通过在闭包中跟踪结果数组或将其传递给下一次调用 async_series 来类似地处理结果。

请注意,最终回调可以假设没有错误,因为它是通过 if(err)(else)async_series 调用到达那里的。

关于node.js - async.series 的简单实现是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13600573/

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