两个实现Nodejs回调加超时限制
两个实现Nodejs回调加超时限制在NodeJS的IO操作都是异步的,有时异步请求太慢回来,和你想做什么而不等待回调我们可以向回调函数添加超时限制,以便在没有回调的特定时间内指示失败,并继续以下步骤。
方案1:异步并行实现
在这里我使用并行异步方法,并行的方法可以使多个异步回调的并行执行,在正常情况下,所有的回调函数的并行完成后最终会收敛到回调函数,但有一个例外,如果一步错误和直接调用并行使用此功能最终的回调函数,你可以实现我们想要的功能。
我asyncwrapper封装的函数,和逻辑简单和直接的盯着代码:
async-timer.js
const async =需要('async);
const = asyncwrapper(FN,间隔,args…)= > {
让final_callback = { } length-1 args参数;
Async.parallel({
函数(回调){
args { 1 } =回调args.length -;
Fn.apply(,args);
},
函数(回调){
setTimeout(){()函数(
回调(408);
},区间);
}
},
函数(错误,结果){
如果(错误= 408结果{ 0 });
final_callback.apply(,{会} .concat({结果{ 0 } }));
});
}
如果(模块父类){
exports.asyncwrapper = asyncwrapper;
其他{ }
让= myfn(arg_1,arg_2,回调)= > {
setTimeout(){()函数(
回调(null,价值1:+ arg_1,价值2:+ arg_2);
},1000);
}
AsyncWrapper(myfn,2000, 10, 20,(呃,值)= > {
console.log(` $ {错误},{ } `美元值);
});
}
您可以直接运行这个js来查看效果:
结async-timer.js
模块调用方法:
const asyncwrapper =需要('。 /异步定时器。JS的AsyncWrapper)。
FN(arg1,arg2 const =,= > {回调)
…假设这里的进程很长,可能会有加班。
回调(null,result_1,result_2);
}
AsyncWrapper(
异步函数
10000 超时
arg1_value ' / /异步函数的1个参数
arg2_value ',2参数 / /异步功能,多参数将继续增加在后面
(错误,结果)= {
/ /结果:{ result_1,result_2 }
最后,返回,结果是特殊的FN,具有多个返回值,结果将以数组的形式返回给您。
}
);
该方案的优点是没有针对节点的最低版本要求。异步库的介绍可以使用。缺点是最终值以数组的形式显示在参数中。
方案2:承诺执行
添加setTimeout在承诺和拒绝的时候。
promise-timer.js
const = promisewrapper(FN,间隔,args…)= > {
让final_callback = { } length-1 args参数;
新承诺((解析,拒绝)= {
args { 1 }(args.length -错误=丘壑,…)= > {
如果(错误)拒绝(错误);
其他的解决(VALS);
};
Fn.apply(,args);
setTimeout(_ = > {
拒绝('promise时间);
},区间);
})
(。然后
结果= {
final_callback.apply(,{零} .concat(结果));
}
)
catch
final_callback(ERR);
})
}
如果(模块父类){
exports.promisewrapper = promisewrapper;
其他{ }
让= myfn(arg_1,arg_2,回调)= > {
setTimeout(){()函数(
回调(null,价值1:+ arg_1,价值2:+ arg_2);
},1000);
}
promisewrapper(myfn,1000, 10, 20,(呃,value_1,value_2)= > {
console.log美元(` {犯错},价值1美元value_1:{ }…价值2美元的value_2:{ } `);
});
}
模块调用方法:
const asyncwrapper =需要('。 /保证定时器。JS的promisewrapper)。
FN(arg1,arg2 const =,= > {回调)
…假设这里的进程很长,可能会有加班。
回调(null,result_1,result_2);
}
promisewrapper(
异步函数
10000 超时
arg1_value ' / /异步函数的1个参数
arg2_value ',2参数 / /异步功能,多参数将继续增加在后面
(呃,result_1,result_2)= > {
最后一次回调
}
);
该方案要求,Nodejs版本高于5的承诺和支持。
谢谢你的阅读。我希望你能帮助你,谢谢你对这个站的支持。