我正在使用試圖在具有三種不同文本行的div中鍵入文本。所以我想爲第一行調用函數typed_text(),然後再次調用第二行,然後再調用第三行。我嘗試使用promises,但是在使用setTimeout()和遞歸時我丟失了。如何在彼此之後調用異步遞歸函數?
我稱之爲這樣的功能。
typed_text("#line_one", frame.text_one, 0, 25)
typed_text("#line_two", frame.text_two, 0, 25)
typed_text("#line_three", frame.text_three, 0, 25)
function typed_text(div, text, index, interval)
{
if (quit_typed_text == true) {
interval = 0;
}
if (index < text.length) {
$(div).append(text[index++]);
setTimeout(function() {typed_text(div, text, index, interval); }, interval);
} else {
click_disabled = false;
}
}
編輯:這是我用遞歸嘗試,並承諾
typed_text("#text_one", frame.text_one, 0, 25).then(typed_text("#text_two", frame.text_two, 0, 25));
function typed_text(div, text, index, interval)
{
return new Promise(function (resolve) {
if (quit_typed_text == true) {
interval = 0;
}
if (index >= text.length) {
click_disabled = false;
resolve();
}
}).then(function() {
if (index < text.length) {
$(div).append(text[index++]);
/* Problem is here, setTimeout.then() does not exist as a function */
setTimeout(function() {typed_text(div, text, index, interval); }, interval);
}
});
}
'我試圖用promises' - 沒有按看起來不像它 –
我沒有發佈我的代碼使用承諾,因爲我不知道我在哪裏與遞歸。如果不是遞歸,我認爲解決方案會起作用。如果這能幫上忙,我可以分享我所擁有的。 – Chris