Javascript node.js中的回调

Javascript node.js中的回调,javascript,node.js,Javascript,Node.js,我读过并听说我不应该在函数中返回值,因为这是一个阻塞操作,在操作完成之前,它可能会拒绝任何请求 这是我编写的一个小函数,我想知道我是否正确处理了它。我这么说是因为我刚开始使用node,我想以正确的方式编码,还因为在函数中有一个测试条件和另一个测试回调的条件感觉很奇怪 function isWithinSplit(path, target, separator, callBack) { var response = ""; var readStream = fs.createReadStream(

我读过并听说我不应该在函数中返回值,因为这是一个阻塞操作,在操作完成之前,它可能会拒绝任何请求

这是我编写的一个小函数,我想知道我是否正确处理了它。我这么说是因为我刚开始使用node,我想以正确的方式编码,还因为在函数中有一个测试条件和另一个测试回调的条件感觉很奇怪

function isWithinSplit(path, target, separator, callBack)
{
var response = "";
var readStream = fs.createReadStream(path);

readStream.on('data', function (data) {
    response += data;
});

//Data complete, process it
readStream.on('end', function (close) 
{
    var array = response.split(separator);

    for (var idx=0 ; idx < array.length; idx++)  
    {
        if(array[idx] != "" && array[idx] == target)
            callBack("true");
        else
            callBack("false");
    }
});

}
我只是想知道人们是不是这样做的,这是否有效。

你忘了

  • 错误处理
  • 使用
    ==
  • 缓存数组长度
  • 命名匿名函数
你忘了

  • 错误处理
  • 使用
    ==
  • 缓存数组长度
  • 命名匿名函数
fileHelper.isWithinSplit(__dirname + ROOM_LIST_PATH, "hello", "|", function(data){
  if(data == "true")
    console.log("hurray!");
});
function isWithinSplit(path, target, separator, callBack) {
    var response = "";
    var readStream = fs.createReadStream(path);

    readStream.on('data', function _aggregateData(data) {
        response += data;
    });

    //Data complete, process it
    readStream.on('end', function _findTarget(close) {
        var array = response.split(separator);

        for (var idx = 0, len = array.length; idx < len; idx++) {
            if (array[idx] === target) {
                return callBack(null, true);
            }
        }
        callback(null, false);
    });

    readStream.on('error', callBack);
}

fileHelper.isWithinSplit(__dirname + ROOM_LIST_PATH, "hello", "|", printIfSuccess);

function printIfSuccess(err, data) {
    if (data === true) {
        console.log("hurray!");
    }
}
readStream.on('end', function(close) {
    callback(null, response.split(seperator).any(function _doesItMatchTarget(val) {
        return val === target;
    }));
});