2017-10-11 64 views
0

嘗試一個承諾內推一個變量以另一轉移變量答應

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; 
    }); 
}; 

的append_data被正確記錄該返回內的數據。我只是不知道如何發送它而不把它變成一個全局變量。

回答

4

只是return它在loadViewFunctionsthen處理程序,以及對loadViewFunction的承諾接受它then處理程序;看到***註釋行:

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; // *** 
    }); 
} 

或者在這種特殊情況下,只是做了追加內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(); 
} 

(我假設有更多的loadViewFunctions比問題;否則,只需要使用playerHeaderinitial_view。)


附註:函數聲明(你有上面的)後面不需要;;語句 -terminator,但聲明不是語句。

+0

謝謝你們,所以noob ...哎呀。 –

1

你的問題是你沒有從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; 
    }); 
}; 

承諾讓您鏈的then/catch電話,但他們也讓你每一個之間修改數據。原始示例中發生的事情是,您的按時間順序排列的第一個then調用返回undefined,因此這是第二個then接收的參數。