我继承了一个完全依赖于async.waterfall的应用程序的应用程序。我不想重写整个事情,但在修复一些项目时想要将回调参数转换为更通用的处理程序。
现在,示例函数如下所示(对于更多函数,存在相同的模式)
function create(data, callbackParent) {
async.waterfall(
[
function(callback) {
if (!interface) {
return init(callback);
} else {
return callback(null);
}
},
function(callback) {
return interface.create(data, callback);
}
],
(error, result) => {
if (error) {
const codeIndex = error.indexOf('statusCode=') + 'statusCode='.length;
const errorStatusCode = error.slice(codeIndex, codeIndex + 3);
if(errorStatusCode == 401) {
reconnect(callbackParent);
}
else {
return callbackParent(error);
}
}
return callbackParent(null, result);
}
);
}
没问题,效果很好;但请注意那里的回调。我试图将其移动到一些通用函数handleResponse(错误,结果),例如:
function create(data, callbackParent) {
async.waterfall(
[
function(callback) {
if (!interface) {
return init(callback);
} else {
return callback(null);
}
},
function(callback) {
return interface.create(data, callback);
}
],
(error, result) => handleResponse
);
}
我尝试了各种类似语法的组合,但是一切都爆炸了,或者我的callbackParent失去了上下文。