这是我的代码:
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 ]){ ... }
答案 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(几乎与你的重复)。