素材牛VIP会员
请问nodejs里如何实现promise动态指定函数名?
 ai***ft  分类:Node.js  人气:911  回帖:2  发布于6年前 收藏
//机器统计
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调用,想写在一个函数里,函数名作为参数,请问该如何做呢?

讨论这个帖子(2)垃圾回帖将一律封号处理……

Lv3 码奴
随***火 站长 6年前#1

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

'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"+"()");

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

Lv3 码奴
钱***4 技术总监 6年前#2
chart['getPhoneList']()
 文明上网,理性发言!   😉 阿里云幸运券,戳我领取