节点 js 从客户端和另一个节点模块调用相同的延迟函数
node js calling same deferred function from client and another node module
有没有更好的方法可以从客户端和另一个节点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) {
});
相关文章:
- 如何从模块链中调用函数.导出到节点中
- 如何在动态创建的节点上绑定函数
- 如何检查DOM节点是否继承自构造函数
- 如何发送作为节点请求响应函数中的代码块的响应
- 从节点中的回调函数返回值
- 如何在节点模块中从命令行运行函数
- 以后添加的节点不会附加到 jQuery UI 函数
- 节点模块对象范围:在所有函数之间共享一个对象
- 节点.js子进程中的运行函数
- 节点 js 在启动时调用函数一次
- 节点JS中的函数调用
- 在我的html中使用节点函数
- 从 PHP 按钮启动节点函数
- 节点函数在请求完成之前返回“undefined”,并具有所需的返回值
- 删除父元素上的节点函数
- 节点函数结果未定义
- 节点函数未中断循环
- 为节点函数定义自定义回调
- 对txt文件中的每一行执行节点函数
- 返回节点函数解析错误