dojo Отложенная функция обратного вызова

Я хочу написать функцию обратного вызова, используя 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 начинает выполняться. Если бы я написал a();b(); результат не то, что я хочу, потому что b быстрее, чем a. Обычно я использую setTimeout и не думаю, что это хорошо. Например, a() может потребоваться 100 с, но setTimeout я установил 50 с, это не нормально ??

Как я могу написать use Deferred, могу переписать свои функции типа a() и b(), то есть одна функция ждет другую.

Спасибо!!


person throw an error    schedule 29.05.2013    source источник


Ответы (1)


Это должно быть чем-то похоже на это:

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();
    });
  });

});
person Marius    schedule 30.05.2013