节点 js 从客户端和另一个节点模块调用相同的延迟函数

node js calling same deferred function from client and another node module

本文关键字:节点 函数 延迟 调用 模块 js 客户端 另一个      更新时间:2023-09-26

有没有更好的方法可以从客户端和另一个节点js模块调用相同的函数。没有 2 个单独的功能。返回值的唯一区别方法是什么?

        exports.getFiles = function(req,res){
            var globPattern = req.body.globPattern;
            var globOptions =req.body.globOptions;
            glob(globPattern, globOptions, function (err, files) {
                if(err)
                    {
                        res.status(400);
                        winston.log('error', err);
                        return res.send({success:false,reason: err});
                    }
                res.send({success:true,data:files});
            });
        };
        exports.getFilesFunc = function(payload){
            var deferred = q.defer();
            var globPattern = payload.globPattern;
            var globOptions = payload.globOptions;
            glob(globPattern, globOptions, function (err, files) {
                if(err)
                    deferred.resolve({success:false,reason: err});
                deferred.resolve({success:true,data: files});
            });
            return deferred.promise;
        };

你基本上可以从getFiles调用getFilesFunc

exports.getFilesFunc = function(payload){
    return Q.nfcall(glob, payload.globPattern, payload.globOptions);
};
exports.getFiles = function(req,res){
    this.getFilesFunct(req.body).then(function(files) {
        res.send({success:true, data:files});
    }, function(err) {
        res.status(400);
        winston.log('error', err);
        return res.send({success:false, reason: err});
    });
};

由于您使用的是 Promises,因此您可以将代码缩短为以下内容:

var Q = require('q'),
    glob = Q.denodeify(require('glob'));
exports.getFiles = function(pattern, options) {
    return glob(pattern, options);
};

然后在控制器中,或者在任何调用函数的位置,您可以控制如何处理重新调整的数据:

module
    .getfiles(req.body.globPattern, req.body.globOptions)
    //or .getFiles(payload.globPattern, payload.globOptions)
    .then(function (files) {
    }, function (error) {
    });