Я работаю через learnyounode учебники и наткнулся на эту интересную немного, и я пытаюсь выяснить, как обрабатывать объем при использовании переменной в качестве функции обратного вызова:Callbacks и переменная сфера
Следующий код работает:
module.exports = function(filePath, fileExtention, callback){
fs.readdir(filePath, function (err, list){
if(err) return callback("Something went wrong", null)
var fileArray = []
list.forEach(function(file){
if(file.indexOf('.' + fileExtention) > -1) fileArray.push(file)
})
return callback(null, fileArray)
})
}
Хотя этот код генерирует исключение fileExtention
не определено:
module.exports = function(filePath, fileExtention, callback){
fs.readdir(filePath, cb)
}
var cb = function (err, list){
if(err) return callback("Something went wrong", null)
var fileArray = []
list.forEach(function(file){
if(file.indexOf('.' + fileExtention) > -1) fileArray.push(file)
})
return callback(null, fileArray)
}
Я пытаюсь понять, почему эту переменную выходит за рамки второй функции обратного вызова, которая определена как cb
и что я сделал бы, чтобы исправить это, поскольку подпись этого обратного вызова исправлена.
Будет ли решение создавать локальную переменную, которая установлена в параметр fileExtention
?
Это работает, но я не знаю, если это правильный способ справиться с обратного вызова передается в модуль для поддержания сферы:
var fs = require('fs')
var fe = ""
var cb;
module.exports = function(filePath, fileExtention, callback){
fe = fileExtention
cb = callback;
fs.readdir(filePath, findFiles)
}
var findFiles = function (err, list){
if(err) return cb("Something went wrong", null)
var fileArray = []
list.forEach(function(file){
if(file.indexOf('.' + fe) > -1) fileArray.push(file)
})
return cb(null, fileArray)
}
Вам необходимо передать обратный вызов в качестве параметра. – SLaks
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures –