dojo延迟回调函数

时间:2013-05-29 16:57:15

标签: dojo callback settimeout deferred resolve

我想用dojo Deferred编写一个回调函数。我写了两个函数,a和b

function a() {
        for(var i = 0; i < 3000; i++) {
            ....
        }
    }

需要更多时间,循环只是一个例子,也许是别的东西。

function b() {
        console.log("b");
    }

我希望b可以等待a,就像a.then(b),即a完成后,然后b开始运行。如果我写了一个(); b(); 结果不是我想要的,因为b比a快。通常我使用setTimeout,我认为它不好。 例如,a()可能需要100s,但是setTimeout我设置50s,这不行吗?

如何编写使用Deferred,可以重写我的函数,如a()和b(),也就是说,一个函数等待另一个函数。

谢谢!

1 个答案:

答案 0 :(得分:0)

它应该与此类似:

require(["dojo/Deferred", "dojo/dom", "dojo/on", "dojo/domReady!"],
function(Deferred, dom, on){
  function a(msg){
    var deferred = new Deferred();

    setTimeout(function(){
      deferred.resolve(msg);
    }, 1000);

    return deferred.promise;
  }

  function b() {
     console.log("b");
  }

  on(dom.byId("startButton"), "click", function(){
    var a= a("message");

      a.then(function(results){
          console.log("Finished with result:"+results);
          b();
    });
  });

});