2017-10-11 2 views
0

Essayer de pousser une variable dans une promesse à un autrevariables de transfert de la promesse à la promesse

function initial_view(){ 
    var append_data = ""; 

    loadViewFunctions(view_functions,append_data).then(function() { 
     $("#main-content").prepend(append_data); 
    }); 
}; 

function loadViewFunctions(view_functions,append_data){ 
    return playerHeader().then(post_app_data => { 
     append_data += post_app_data; 
    }); 
}; 

Le append_data est enregistre les données correctement dans le retour. Je ne sais pas comment l'envoyer sans en faire une variable globale.

Répondre

4

Juste return hors du gestionnaire then dans loadViewFunctions, et que le gestionnaire then sur la promesse de loadViewFunction accepter; voir *** lignes commentées:

function initial_view(){ 
    var append_data = ""; 

    loadViewFunctions(view_functions,append_data).then(function(updated_data) { // *** 
     $("#main-content").prepend(updated_data); // *** 
    }); 
} 

function loadViewFunctions(view_functions,append_data){ 
    return playerHeader().then(post_app_data => { 
     return append_data + post_app_data; // *** 
    }); 
} 

alternativement dans ce cas particulier, il suffit de faire le appending au sein initial_view:

function initial_view(){ 
    var append_data = ""; 

    loadViewFunctions(view_functions).then(function(view_data) { // *** 
     $("#main-content").prepend(append_data + view_data); // *** 
    }); 
} 

function loadViewFunctions(view_functions) { // *** 
    return playerHeader(); 
} 

(je suppose qu'il ya plus à loadViewFunctions que dans la question, sinon, il suffit d'utiliser playerHeader en initial_view.)


Note latérale: La fonction déclarations (ce que vous avez ci-dessus) n'ont pas besoin ; après eux. ; est un instruction -terminator, mais les déclarations ne sont pas des instructions.

+0

Merci les gars, donc noob ... oups. –

1

Le problème est que vous ne renvoyez pas de valeur à partir du rappel playerHeader().then().

function initial_view(){ 
    var append_data = ""; 

    loadViewFunctions(view_functions,append_data).then(function(modifiedAppendData) { 
     $("#main-content").prepend(modifiedAppendData); 
    }); 
}; 

function loadViewFunctions(view_functions,append_data){ 
    return playerHeader().then(post_app_data => { 
     append_data += post_app_data; 
     return append_data; 
    }); 
}; 

promesses vous permettent d'enchaîner vos appels then/catch, mais ils vous permettent également de modifier vos données entre chacun. Qu'est-ce qui se passe dans votre exemple d'origine est que votre appel then chronologiquement premier retourne non défini, c'est ce que le 2e then reçoit comme argument.