Javascript 如何将变量用作函数?

Javascript 如何将变量用作函数?,javascript,jquery,ajax,function,Javascript,Jquery,Ajax,Function,这是我的密码: Promise.all([twitter_ajax(), instagram_ajax(), facebook_ajax()]).then(() => { stopBlinking() formSubmited = false; }).catch( (err) => { console.error(err); stopBlinking() formSubmited = false; }) 因为我的项目中有一个设置系统,所以我需

这是我的密码:

Promise.all([twitter_ajax(), instagram_ajax(), facebook_ajax()]).then(() => {
    stopBlinking()
    formSubmited = false;
}).catch( (err) => {
    console.error(err);
    stopBlinking()
    formSubmited = false;
})
因为我的项目中有一个设置系统,所以我需要将这三个ajax请求动态化。我的意思是,有时候我需要把它们全部发送出去,有时候我需要把它们都发送出去,或者可能是其中一个。这完全取决于用户配置的设置

你知道我该怎么处理吗


这是我的想法,有语法错误。我将设置存储到cookie中,并可以如下方式访问它:

var functions = getCookie($ajaxRequests);
//=> twitter_ajax(), instagram_ajax(), facebook_ajax()
看到了吗?我有一个字符串,它是我代码的一部分。但遗憾的是,这不起作用:

Promise.all([ functions ]){ ... }

数组中可以有非承诺值,这些值将被视为已解析。因此,最好尽早终止功能:

function twitter_ajax(){
 //if settings are wrong
 if( !load_twitter ) return;
 //elsewhen call and return a promise
 return Promise.resolve();
}
或者你在承诺中有条件地加载它们。全部:

Promise.all([
  load_twitter? twitter_ajax() : 0,
  load_facebook? facebook_ajax() : 0
]).then(whatever);

数组中可以有非承诺值,这些值将被视为已解析。因此,最好尽早终止功能:

function twitter_ajax(){
 //if settings are wrong
 if( !load_twitter ) return;
 //elsewhen call and return a promise
 return Promise.resolve();
}
或者你在承诺中有条件地加载它们。全部:

Promise.all([
  load_twitter? twitter_ajax() : 0,
  load_facebook? facebook_ajax() : 0
]).then(whatever);

<>我会考虑函数是全局存储的(在窗口上),因为你的代码没有显示任何范围,你可能需要用适当的对象替换窗口。其思想是使用括号
[]
来访问使用变量值、字符串或包含非正常字符(如句号
的字符串)的方法或属性

var settings = ["twitter_ajax","instagram_ajax"];
var promises = settings.map(function(func_name){
    return window[func_name](); //Change window to what is appropriate if necessary.
})
Promise.all(promises).then(() => {
    stopBlinking()
    formSubmited = false;
}).catch( (err) => {
    console.error(err);
    stopBlinking()
    formSubmited = false;
})
因此,我们使用map来执行每个数组项的函数名,并返回一个包含其返回值(promises)的数组


(几乎是你的)关于使用变量内容调用函数。

我会考虑函数是全局存储的(在窗口上),因为你的代码没有显示任何范围,你可能需要用适当的对象替换窗口。其思想是使用括号
[]
来访问使用变量值、字符串或包含非正常字符(如句号
的字符串)的方法或属性

var settings = ["twitter_ajax","instagram_ajax"];
var promises = settings.map(function(func_name){
    return window[func_name](); //Change window to what is appropriate if necessary.
})
Promise.all(promises).then(() => {
    stopBlinking()
    formSubmited = false;
}).catch( (err) => {
    console.error(err);
    stopBlinking()
    formSubmited = false;
})
因此,我们使用map来执行每个数组项的函数名,并返回一个包含其返回值(promises)的数组


关于使用变量内容调用函数的一个(几乎与您的相同)。

为什么不呢,例如
settings.push(twitter\u ajax)
然后
promises=settings.map(f=>f())
我推断这些设置来自文本源,因为OP从getCookie()获取它们。因此,我的建议跳过了检查文本值和添加相关函数的步骤。虽然这也意味着恶意用户可以添加任何函数名并使其运行,但无论如何都需要某种过滤器。为什么不这样做呢?例如
settings.push(twitter\u ajax)
然后
promises=settings.map(f=>f())
我推断这些设置来自文本源,因为OP从getCookie()获取它们. 因此,我的建议跳过了检查文本值和添加相关函数的步骤。尽管这也意味着恶意用户可以添加任何函数名并使其运行,但无论如何都需要某种过滤器。