所以我相當新的JavaScript和意識到異步函數調用。我做了相當多的研究,發現如果你想連續運行異步調用,你可以使用回調函數和promise。現在我已經開始瞭解如果只運行一些異步函數,這兩種實現是否有用。我試圖解決一個完全不同的動物;至少就我所知而言。我目前正在構建一個需要顯示的網站,好像它正在向自己寫文本。爲了向大家介紹我的JS代碼,下面是寫入網頁的功能(我相當新,所以如果您認爲自己有更好的解決方案,請點擊以下示例):在JS中鏈接異步函數調用?
function write(pageText, elementId, delay) {
var element = document.getElementById(elementId);
var charCount = 0;
setInterval(function() {
if (charCount > pageText.length) {
return;
} else {
element.innerHTML = pageText.substr(0, charCount++);
}
}, delay);
}
write("This is an example", 'someRandomDiv', 100);
<div id="someRandomDiv">
</div>
有了這個我想一行文字寫了一個又一個網頁一行。從本質上講,我利用在Java和C#編寫像這樣的代碼:
function writePassage()
{
var passage=["message one", "message two", "... message n"];
for(var i = 0; i<passage.length; i++)
{
write(passage[i], 'someRandomDiv', 100);
}
}
很明顯,因爲這將無法工作,因爲在wirtePassage()循環將完成一個或兩個異步函數調用之前執行結束。我問是否有一個理智的解決方案來解決這個錯誤,我有n個異步調用,並且我需要在下一個觸發之前執行一個執行。值得一提的是,我不想僅僅在上面運行這個循環,並添加另一個變量,以便跟蹤我將拖延每段文字的時間。如果在調用下一個函數之前有一種強制執行函數的編程方式,我寧願選擇。感謝您閱讀這個怪物問題!
*「這是不行的」 *不是它做什麼預期工作或拋出什麼錯誤,正確的解釋。請參閱[問] – charlietfl
https://chainyjs.bevry.me可能會對您感興趣 – balupton
僅供參考 - 忘記清除時間間隔:var interval = setInterval(function(){ if(charCount> pageText.length){ clearInterval(區間); }其他{ element.innerHTML = pageText.substr(0,charCount ++);} } ,延遲);' –