-3
我想我理解的範圍和承諾/同步在這一點上,但我有一個棘手的時間弄清楚爲什麼這個塊的代碼不斷回報「未定義」當我在node.js中運行它全局變量不被數組找到?
var playerName;
var teamName;
var tweets = [];
function composeTweet(){
tweets = [ playerName + ' plays basketball for the ' + teamName,
teamName + ' want to trade for ' + playerName,
'what if ' + playerName + ' got traded to the ' + teamName];
function getPlayer() {
// some code, new promise, etc ... this stuff works locally ...
playerName = 'Tim';
}
function getTeam(){
// code, promise ... works here also ...
teamName = 'Spurs';
}
getPlayerName().then(function(){
return getTeamName();
}).then(function(){
// sendTweet();
console.log(tweets[1]);
}).catch(function(fromReject) {
console.log('error?');
});
}
composeTweet();
這應該打印:
馬刺想要交易的添
而是我得到:
不確定要爲未定義
貿易的playerName和teamName不是全局變量在這種情況呢?我誤解了如何使用承諾?如何在不使用window.playerName的情況下引用全局變量(我認爲這不適用於node.js,對嗎?)?
我大多是新編程,所以如果這是重複的道歉!非常感謝!!!
該代碼沒有真正意義..你從來沒有分配任何東西給'playerName'或'teamName'(設置它們的函數永遠不會被調用),所以當然它們是未定義的。 –
'tweets'中的字符串是在調用'composeTweet'函數時創建的。如果稍後更改變量值,它不會自動更新已創建的字符串。如果你想獲得變量的當前值,你必須使它們成爲函數。 – JJJ
換句話說,如果你做'var a =「Hello」; var b = a +「World!」; a =「再見殘忍」;'b'的值仍然是''Hello World!「' - 承諾與它沒有任何關係。 – JJJ