2016-08-23 22 views
-1

我得到的錯誤是,cb is not a function。但正如在這段代碼中看到的,在異步瀑布的最終回調中,我調用了cb,但仍然出現錯誤。異步瀑布最終回調得到函數未找到

function shiftIndex(key, cb) { 
    async.waterfall([ 
    (readFileCallback) => { 
     jsonfile.readFile(dataPath, (err, data) => { 
     if (err) return readFileCallback(err, null, null); 
     else if (!data) return readFileCallback(new Error('File Empty'), null, null); 
     else return readFileCallback(null, data, key) 
     }); 
    }, 

    (data, key, stackCallback) => { 
     console.log("The KEY is -> " + key); 
     if (!(key in data)) return stackCallback(new Error("Invalid key"), null); 
     else{ 
     var items = data[key] 
     var first = items.shift(); 
     items.push(first); 
     return stackCallback(null, data); 
     } 
    }, 

    (data, writeDataCallback) => { 
     jsonfile.writeFile(dataPath, data, (e) => { 
     if (e) return writeDataCallback(e, false, null); 
     else return writeDataCallback(null, true, data); 
     }) 
    } 
    ], 

    (e, success, data) => { 
    if (e) return cb(e, false, null); 
    return cb(null, true, data); 
    } 
)} 
+0

檢查您是否將函數傳遞給'shiftIndex'。 –

+0

我該如何檢查?這是我第一次寫異步瀑布 – XPLOT1ON

+0

函數shiftIndex(key,cb){console.log(cb)'必須打印'Function'。在這種情況下,您可以避免使用異步庫。 –

回答

1

err, res, data是不常見的回調格式,因爲res是不必要的。您始終檢查if (data)而不是if (res)。我簡化了代碼。 Imho,它更具可讀性。

function shiftIndex(key, cb) { 
    jsonfile.readFile(dataPath, (err, data) => { 
     if (err) 
      return cb(err); 

     if (!data) 
      return cb(new Error('File Empty')); 

     if (!(key in data)) 
      return cb(new Error('Invalid key')); 

     var items = data[key] 
     var first = items.shift(); 
     items.push(first); 
     data = items; 

     jsonfile.writeFile(dataPath, data, (err) => cb(err, (err) ? null : data)); 
    }); 
}; 
+0

是的,這當然是真的,我並不真的需要成功的反應,因爲如果它的虛假數據將是空的或無效的。 ,我的問題現在已經解決了(通過簡單的計算機重新啓動)我不知道是什麼原因導致了錯誤。我對該項目進行的唯一更改是檢查'cb'是否是函數,正如您先前所建議的 – XPLOT1ON