Ich weiß nicht, ob es möglich ist, aber ich würde faktorisieren Funktionen wieFactorize Funktionen Namen in Javascript
// wiki
if(command === "wiki"){
bangSearch('wikiSearch','_',args);
}
// afr amazon fr
if(command === ("afr")){
bangSearch('amazonSearch','+',args);
}
function wikiSearch(recherche){
var url = "https://fr.wikipedia.org/w/api.php?action=opensearch&search="+recherche+"&limit=1&namespace=0&format=json";
request(url, function(err, resopnse, json){
//some code
});
}
function amazonSearch(recherche){
var url = "https://www.amazon.fr/s/ref=nb_sb_noss?__mk_fr_FR=%C3%85M%C3%85%C5%BD%C3%95%C3%91&url=search-alias%3Daps&field-keywords="+recherche;
message.channel.send('Recherche amazon pour: '+recherche+'\n'+url);
}
function bangSearch(searchFunctionName,keywordSeparator,args){
if(args.length > 1){
searchFunctionName(args.join(keywordSeparator));
}else if (args.length == 0) {
searchFunctionName(/*some args*/);
}else{
searchFunctionName(args[0]);
}
}
Aber wenn ich den Code ausführen, ich habe diesen Fehler: Typeerror: searchFunctionName ist keine Funktion
So verstehe ich, dass der Code searchFunctionName wie wikiSearch oder amazonSearch nicht aufrufen, aber es versteht nur, dass die aufgerufene Funktion searchFunctionName ist.
So kann ich nicht das Argument Funktion aufrufen, die entweder „WikiSearch“ oder „amazonSearch“
Ist es möglich, dies zu tun? Kannst du mir helfen ?
Der gesamte Code: Hier ist der gesamte Code. Es ist für eine Disharmonie bot und ich verwende Discord.js
// wiki
if(command === "wiki"){
console.log(args);
bangSearch(wikiSearch,'_',args);
}
// afr amazon fr
if(command === ("afr")){
bangSearch(amazonSearch,'+',args);
}
function wikiSearch(recherche){
var url = "https://fr.wikipedia.org/w/api.php?action=opensearch&search="+recherche+"&limit=1&namespace=0&format=json";
request(url, function(err, resopnse, json){
try {
var name = JSON.parse(json)[1];
var link = JSON.parse(json)[3];
if(name ==='undefined'){
message.channel.send('Aucun résultats');
}else {
message.channel.send('Recherche wikipedia pour: '+recherche);
message.channel.send('Nom: '+name[0]+'\n'+link[0]+'\n\n');
}
} catch (e) {
callback('ERREUR: '+e);
}
});
}
function amazonSearch(recherche){
var url = "https://www.amazon.fr/s/ref=nb_sb_noss?__mk_fr_FR=%C3%85M%C3%85%C5%BD%C3%95%C3%91&url=search-alias%3Daps&field-keywords="+recherche;
message.channel.send('Recherche amazon pour: '+recherche+'\n'+url);
}
function bangSearch(searchFunctionName,keywordSeparator,args){
if(args.length > 1){
searchFunctionName(args.join(keywordSeparator));
}else if (args.length == 0) {
message.channel.send('tu veux quoi ?').then(() => {
message.channel.awaitMessages(response => response.content.length > 0 , {
max: 1,
time: 10000,
errors: ['time'],
}).then((collected) => {
searchFunctionName(collected.first().content);
}).catch(() => {
message.channel.send('T\'as pas trouvé les touches sur ton clavier ou quoi ?');
});
});
}else{
searchFunctionName(args[0]);
}
}
https://stackoverflow.com/questions/5905492/dynamic-function-name-in-javascript - Es ist nicht wirklich ein schöner Weg, dies zu tun. Verwenden Sie stattdessen ein Objekt. – evolutionxbox
übergeben Sie einfach den Funktionsnamen, keine Zeichenfolge. –
@DavinTryon, das mit eval umgehen würde. puh – evolutionxbox