Javascript 如何仅在执行第一个方法后执行第二个方法

Javascript 如何仅在执行第一个方法后执行第二个方法,javascript,jquery,css,html,Javascript,Jquery,Css,Html,我只想在加载段落标记后打印标题标记。下面是我的Javascript代码。有关更多说明,请参见plunker: 功能更改文本(cont1、cont2、速度){ var Otext=cont1.text(); var Ocontent=Otext.split(“”); var i=0; 函数show(){ 如果(i

我只想在加载段落标记后打印标题标记。下面是我的Javascript代码。有关更多说明,请参见plunker:

功能更改文本(cont1、cont2、速度){
var Otext=cont1.text();
var Ocontent=Otext.split(“”);
var i=0;
函数show(){
如果(i
我会这样做(请注意,Internet Explorer不支持ES6承诺,但也可以在旧浏览器中使用承诺)

您必须填写注释部分才能使其正常工作:

var Otimer;

/*@TODO: refactor show() function to use ES6 Promises (eventually with shims) */
function show(Ocontent) {
    var i = 0;

    if (i < Ocontent.length) {
        cont2.append(Ocontent[i]);
        i = i + 1;
    };

    if (Otimer === undefined) {
        Otimer = setInterval(show, speed); // Remember to fulfill the promise and remove the interval once it's finished
    }

    // return the promise
};

function changeText(p1, p2, speed) {
    var Otext = p1.text();
    var Ocontent = Otext.split("");

    return show(Ocontent);
};

$(function () {
    changeText($("p"), $(".p2"), 30).then(function() { // We call changeText the second time after the  promise return by changeText() is fulfilled and the show() function has finished
        Otimer = undefined;
        changeText($("h2"), $(".h2"), 30);
    });
});
var-Otimer;
/*@TODO:重构show()函数以使用ES6承诺(最终使用垫片)*/
功能展示(Ocontent){
var i=0;
如果(i
首先,声明函数内部的变量是作用域变量,不能从函数外部访问。 因此,行
clearInterval(Otimer)永远不起作用

下面的代码修复了范围问题,并使用回调实现了您想要的功能

function changeText(cont1, cont2, speed, cb) {
  var Otext = cont1.text();
  var Ocontent = Otext.split("");
  var i = 0;

  function show() {
    if (i < Ocontent.length) {
      cont2.append(Ocontent[i]);
      i++;
    }else{
      clearInterval(Otimer)
      if(cb) cb()
    }
  };
  var Otimer = setInterval(show, speed);
};

$(document).ready(function() {
  changeText($("p"), $(".p2"), 30, function(){
    changeText($("h2"), $(".h2"), 30);
  });
});
功能更改文本(cont1、cont2、速度、cb){
var Otext=cont1.text();
var Ocontent=Otext.split(“”);
var i=0;
函数show(){
如果(i

仅供参考,不需要两个
文档。就绪的
处理程序-将两个代码块合并为一个。@chetan:打开web控制台,它会为您提供重要信息。@chetan,您可以为此尝试calback函数。另外,如果只使用了一次
Otimer
,则可以使用
setTimeout
function changeText(cont1, cont2, speed, cb) {
  var Otext = cont1.text();
  var Ocontent = Otext.split("");
  var i = 0;

  function show() {
    if (i < Ocontent.length) {
      cont2.append(Ocontent[i]);
      i++;
    }else{
      clearInterval(Otimer)
      if(cb) cb()
    }
  };
  var Otimer = setInterval(show, speed);
};

$(document).ready(function() {
  changeText($("p"), $(".p2"), 30, function(){
    changeText($("h2"), $(".h2"), 30);
  });
});