要麼我誤解了BlueBird和它的promisify東西是如何工作的,或者我在這裏做錯了什麼。我有一個導出一個函數的「上傳處理程序」。這個函數有一個回調PromisifyAll - 回調函數不是函數
上傳處理程序看起來像這樣(簡化):
function processSourceStrings(fileInformation, callback) {
var filePath = fileInformation.path
var fileExtension = path.extname(filePath)
switch(fileExtension) {
case '.json':
processFile(filePath, function(err, result) {
if(err)
callback(err)
callback(null, result)
})
case '.pot':
case '.po':
processFile(err, result) {
if(err)
callback(err)
callback(null, result)
})
}
}
module.exports = {
processSourceStrings: processSourceStrings
}
在我的路由器我promisify處理程序是這樣的:
const uploadHandler = Promise.promisifyAll(require('./process-uploads/upload-handler'))
當函數在運行時被調用(當它處理文件時),它會在callback(err)
行上引發異常,該行會顯示:
TypeError: callback is not a function
在這裏,我從我的router.js調用該函數:
for(var i=0; i<req.files["sourceStrings"].length; i++) {
var fileInformation = req.files["sourceStrings"][i]
var filePath = fileInformation.path
var targetFilePath = path.join(targetPath, req.files["sourceStrings"][i].filename)
fileInformation.path = targetFilePath
mv(filePath, targetFilePath, {mkdirp: true}).then(uploadHandler.processSourceStrings(fileInformation))
.then(function(result) {
console.log(result)
})
.catch(function(err) {
next(err)
})
}
我在做什麼錯?
你在哪裏調用這個函數'processSourceStrings'? –
你的switch語句應該有一個'break' - 如果匹配''.json''的話,那麼它和''.po''就會運行。 –
請向我們展示您調用此功能的代碼。 – JLRishe