javascript - 请问nodejs里如何实现promise动态指定函数名?

查看:69
本文介绍了javascript - 请问nodejs里如何实现promise动态指定函数名?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

//机器统计
exports.getMachineAll = (req,res,next)=>{
    chart.getMachineAll()
    .then((result)=>{
        res.json(result);
    })
}
//电话列表
exports.getPhoneList = (req,res,next)=>{
    chart.getPhoneList()
    .then((results)=>{
         res.json(result);
    })
}

mvc结构的控制器里-根据路由进来的有大量的类似这种结构,前端通过$.ajax调用,想写在一个函数里,函数名作为参数,请问该如何做呢?

解决方案

可以用事件触发机制实现:
方法一

'use strict'
var events = require("events");
var proxy = new events.EventEmitter();

function  reflect(funcName){
    proxy.emit(funcName,"你传递的数据");
}

function getPhoneList(val){
    console.log("getPhoneList操作:" + val);
}

proxy.on("getPhoneList",function(value){
    //also can do otherthings
    getPhoneList(value);
});

用法如下:

var args = "getPhoneList";
reflect(args);//getPhoneList操作:你传递的数据

Promise/Deferred 模式本质还是用事件形式实现的,至于JS内置对象中的Promise,不用事件方式改造的话,不能实现你需要的功能。

方法二

'use strict'
var events = require("events");
var proxy = new events.EventEmitter();
var getPhoneList = function(){
    console.log(" this is getPhoneList");
}
var getMachineAll = function(val){
    console.log("this is getMachineAll");
}

var funcs = [{
                name:"getPhoneList",
                func:getPhoneList
            },
            {
                name:"getMachineAll",
                func:getMachineAll
            }];

function reflect(funcName){
    proxy.emit("execute",funcName);
}

proxy.on("execute",function(funcName){
    for(var f of funcs){
        if (f.name===funcName) {
            (f.func)();
            break;
        }
    }
});

用法如下:

var args = "getMachineAll";
reflect(args);//返回结果://this is getMachineAll

方法三

function getPhoneList(){
    console.log("this is liudong");
}

eval("getPhoneList"+"()");

如果对你有帮助,欢迎采纳

这篇关于javascript - 请问nodejs里如何实现promise动态指定函数名?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆