2017-07-13 61 views
0

我已經搜索過堆棧,並且找不到明確的答案。我有一個小提琴,可以從一個單詞中逐個字母地打出一個字母。但是當我運行兩次函數時,它會一起完成。我嘗試使用時,然後它仍然似乎沒有工作。我希望的結果是 「你好,世界!Hello2」,而是它打印在一起, 「HHeelllloo ......」javascript如何用'when'和'then'來運行函數

http://jsfiddle.net/Jsbbvk/vL8tLwfh/

(一些僞代碼)

$.when(showText(param1, param2)).then(function() { 
    showText(param3, param4); 
}); 
+0

是什麼'showText(參數1,參數2)'做什麼?並返回 - 哦,我明白了,它返回undefined ...你知道$ .when是什麼嗎? –

+0

'$ .when'不能做任何魔法(它不應該在這裏使用)。你的'showText'函數需要返回一個在動畫完成時會解析的promise。 – Bergi

+0

您的預期結果是什麼? – Chang

回答

0

我試圖解釋這一點:

  • 首先$。當(showText(PARAMS))呼籲然後將其附加的第一 指數( 「H」),以 「格」
  • 然後setTimeout的調用間隔的功能,這是showText再次 叫
  • 但你的$。當(showText(PARAMS))沒有等到setTimeout的是 完成,
  • 所以,$然後調用方法和運行showText(「#msg」,「Hello2」,0, 500)while printText(「#msg」,「Hello,World!」,0,500)仍在運行 打印「H」後
  • 因此,他們在同一時間運行,不要等待對方

我嘗試修復您的代碼而不是使用$ .when d $。我正在使用回調函數。因此,在setInterval完成作業之前不會調用回調函數。

function showText (target, message, index, interval, callback) { 
 
    if (index < message.length) { 
 
    $(target).append(message[index++]); 
 
    var session = setTimeout(function() { 
 
    \t showText(target, message, index, interval, callback); 
 
     if(index === message.length -1){ 
 
     \t callback ? callback() : null; 
 
     } 
 
    }, interval); 
 
    } 
 
} 
 
    
 
$(function() { 
 

 
    showText("#msg", "Hello, World!", 0, 500, function(){ 
 
    \t showText("#msg", "Hello2", 0, 500) 
 
    }) 
 
    
 
    
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> 
 
<div id="msg"/> 
 
<span id="text_target"></span>

我的小提琴: https://jsfiddle.net/firhatsungkar/zg9un4po/

相關問題