いくつかの 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));
しかし、それは何もしません。ウォーターフォールの 2 番目の関数が呼び出されることはありません。これは、最初の関数からのコールバックがウォーターフォールで期待どおりに構成されておらず、 callback(null, data )ではなく callback(data)で返されるためである可能性があります。