我有一个嵌套函数,它执行一些 I/O 并在完成结果数据后调用回调。像这样的东西:
function getStatus(returnCallback, errorCallback) {
sendRequest('someData', returnCallback, errorCallback)
}
其中 sendRequest() 是一个与硬件交互的函数,并使用从硬件获得的数据调用 returCallback 或 errorCallback 以防出现问题。我现在的问题是,硬件返回的数据是一个非常长的字符串,由代表不同参数的不同数字组成。我想要做的是操纵提供给 returnCallback 的数据,并为每个参数创建一个具有属性的对象。有没有办法做到这一点?我已经尝试过使用 async.waterfall
function getStatus(returnCallback, errorCallback) {
let returnArray = {};
async.waterfall([
function (callback) {
sendRequest('someData', callback, errorCallback);
},
function (data, callback) {
returnArray.statusBits = data.slice(0, 6);
returnArray.faultBits = data.slice(7, 13);
returnArray.alertBits = data.slice(14, 20);
returnArray.pumpRotationSpeed = parseInt(data.slice(21, 26));
returnArray.motorPower = parseInt(data.slice(27, 31));
returnArray.frequencyConverterTemperature = parseInt(data.slice(36, 39));
returnArray.pumpOperationTime = parseInt(data.slice(44, 48));
callback(null, returnArray)
}
], returnCallback(returnArray));
但这无济于事。看起来瀑布中的第二个函数从未被调用过。这可能是因为第一个函数的回调在瀑布中的结构不符合预期,它返回callback(data)而不是 callback(null, data)