2015-11-12 3 views
0

Новое для JavaScript. Обещания и трудное время схватывания концепции. Казалось, я, наконец, понял, но не могу заставить его работать.jQuery Отложенное обещание, то

Вот простая попытка:

first = function(){ 
    var deferred = new $.Deferred(); 
    console.log("first running") 
    return deferred.promise(); 
} 

second = function(){ 
    console.log("second running..sigh.."); 
} 

$(document).ready(function() { 

    first().then(second); 

}); 

Во-вторых, не вызывается.

ответ

5

Для того, чтобы вторая функция будет называться, вы должны разрешить отсроченной вернулись из первой функции:

first = function(){ 
    var deferred = new $.Deferred(); 
    console.log("first running"); 
    deferred.resolve(); // <----------resolve the deferred 
    return deferred.promise(); 
} 

Вы также можете разрешить его с аргументами так, что вся ее решить с, будет приняты как аргументы вашей второй функции. Вот скрипка, которая добавляет небольшую задержку с решимостью так подражает асинхронное поведение и решает с фактическими данными:

http://jsfiddle.net/1k6tLev8/1/

1

Вы можете думать в Promise в качестве задачи, которые в будущем будут обработаны и результат будет возвращен ко всем функциям, которые следуют за отложенным объектом.

Обещания может иметь 3 + 1 состояния:

  1. В ожидании (Задача еще не обработано)
  2. FullFilled или Решенный (Правильно Обработанные)
  3. Отклонено (Обработано, но не выполнено)
  4. Стадировано (указывает на то, что задача уже обработана.)

var doSomethingAsync = new Promise(function(resolve, reject) { 
 
    window.setTimeout(function() { 
 
    resolve('Hello World'); 
 

 
    // OR 
 
    
 
    // reject('You Are Not Welcome') 
 
    }, 5000); 
 
}); 
 

 
doSomethingAsync.then(
 
    function(message) { 
 
    console.log('After few seconds we can finally tell you:', message) 
 
    }, 
 
    function(error) { 
 
    console.log('After few seconds we can finally tell you that: ', error); 
 
    } 
 
);

Как вы можете увидеть в приведенном выше фрагменте затем метод в Promise Object принимает TWO params (обратите внимание, если имеется, есть третий параметр, называемый , извещает или прогресс), первый называется в случае полной подачи, второй - в случае отказа.

Пока обещание находится в В ожидании не вызываются обратные вызовы!

Смежные вопросы