gpt4 book ai didi

javascript - 函数设计接受回调最佳实践

转载 作者:太空宇宙 更新时间:2023-11-03 22:33:13 31 4
gpt4 key购买 nike

我正在为 API 设计一个模块,其中某些方法只有在您关心结果时才指定回调才有意义。一个示例是存储某些数据的请求,其中响应将是有关所存储数据的信息(内部 ID、时间戳等)。我理解该函数的代码应该是:

MyFunc.prototype.putRecord = function(data, next){
var self = this;
//Any validation and transformation
api.storeRecord(data, function(err, data){
next(err, data);
});
};

我的问题是如何设计它,以便当 next === "undefined" 时,我的模块不会抛出错误。如果 api.storeRecord 调用确实返回错误,并且未提供 next 参数,我仍然希望抛出该错误。我正在考虑创建一个辅助函数来处理检查 next 是否已定义,如果定义了则调用它,或者如果发生错误则抛出错误:

function callNext(err, res, next){
if (next) next(err, data);
else if (err) throw err;
};

然后我可以调用此函数而不是 next:

MyFunc.prototype.putRecord = function(data, next){
var self = this;
//Any validation and transformation
api.storeRecord(data, function(err, data){
callNext(err, data, next);
});
};

这是实现我想做的事情的最佳方式,还是有其他被认为是标准的方式?

最佳答案

你可以让它更干净一点。由于您的处理程序除了转发调用之外什么也不做,因此您实际上可以完全消除它。您确实需要处理无效/缺失的 next ,以便像您一样抛出正确的 err 。以下是我使用回调方案的方法:

function throwHandler(err) {
if(err) {
throw err;
}
}

function nextOrHandler(next) {
if('function' === typeof next) {
return next;
}
return throwHandler;
};

MyFunc.prototype.putRecord = function(data, next) {
api.storeRecord(data, nextOrHandler(next));
}

关于javascript - 函数设计接受回调最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33687379/

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