如何将变量用作函数?

时间:2017-09-27 05:48:18

标签: javascript jquery ajax function

这是我的代码:

Promise.all([twitter_ajax(), instagram_ajax(), facebook_ajax()]).then(() => {
    stopBlinking()
    formSubmited = false;
}).catch( (err) => {
    console.error(err);
    stopBlinking()
    formSubmited = false;
})

由于我的项目中有一个设置系统,我需要动态地设置这三个ajax请求。我的意思是有时我需要发送所有这些,有时我需要发送这些,或者可能是其中之一。这完全取决于用户配置的设置。

我知道如何处理它?<​​/ p>

这是我的想法,它有语法错误。我将设置存储到cookie中,可以像这样访问它:

var functions = getCookie($ajaxRequests);
//=> twitter_ajax(), instagram_ajax(), facebook_ajax()

请参阅?我有一部分代码的字符串。但遗憾的是,这不起作用:

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

2 个答案:

答案 0 :(得分:2)

您可以在数组中包含非承诺值,这些值计为已解析。因此,最好的方法可能是尽早终止这些功能:

function twitter_ajax(){
 //if settings are wrong
 if( !load_twitter ) return;
 //elsewhen call and return a promise
 return Promise.resolve();
}

或者你在Promise.all中有条件地加载它们:

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

答案 1 :(得分:2)

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

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)的数组。

关于使用变量内容来调用函数的very interesting post(几乎与你的重复)。