我想在做AJAX請求時僞造同步JavaScript。 我有一個getPagePath(id)
函數需要通過給頁面頁面ID來獲取頁面的頁面路徑,它通過web API接收數據。我認爲這會很簡單,只需向服務器發送ajax請求並接收頁面路徑即可。但是發生了什麼事情:當請求頁面路徑時,我的代碼繼續運行並返回一個空的var,之後ajax調用完成,但是延遲。while while循環中的Javascript同步超時
我知道我的解釋是不是太多這樣說這裏是我的代碼:
var getPagePath = function() {
// Function to check if this.pagePath is set.
var pagePathReady = function() {
console.log('PAGEPATH: CHECKING');
if (this.pagePath && this.pagePath != null) {
return true;
} else {
return false;
}
};
if (!pagePathReady()) {
// No pagePath defined so lets set it.
this._setPagePath();
while (!pagePathReady())
{
// Not yet defined, check again..
// *** The problem ***
// This while loop is running insanely fast making the browser crash.
// How can I make this wile loop pause for 1 sec?
// *******************
console.log('PAGEPATH: NOT READY -> CHECK AGAIN');
}
// READY
console.log('PAGEPATH: READY -> VALUE: ' + this.pagePath);
return this.pagePath;
} else {
return this.pagePath;
}
};
var _setPagePath = function() {
if (!this.pagePathRequestFired) {
this.pagePathRequestFired = true;
// Fire request.
system.url(
this.getNodeId(),
function(url) {
// Request ready, set pagePath.
this.pagePath = url;
this.pagePathRequestFired = false;
},
this
);
} else {
// Call already running..
}
};
我已經在多個解釋意見設置的問題。
在此先感謝!
我使用這種方法導致需要在另一段代碼中設置'pagePath',我把它設置爲'paramBag.path = this.controller.getPagePath();' –
除了上面的評論: 我使用這種方法導致需要在另一段代碼中設置'pagePath',我將它設置爲'paramBag.path = this.controller.getPagePath();'當使用回調時,'getPagePath()'將在請求仍在運行時返回'undefined'。當請求準備就緒時,它會調用回調函數,但回調函數無法設置paramBag中的屬性。對不起,我知道事情並不清晰。很難解釋這種情況.. –