2016-01-15 2 views
0

Я вызываю две функции в $ .when (f1, f2), но done() вызывается до того, как f2 разрешен. Но если я поставлю инструкцию alert(), она работает нормально.

function f1(){ 
var d= new $.Deferred(); 
.......code...... 
d.resolve(); 
return d.promise(); 
} 
function f2(){ 
var d= new $.Deferred(); 
.......code...... 
d.resolve(); 
return d.promise(); 
} 
function f3() 
{.....code..... } 

$.when(f1().f2()).done(f3()); 

код выше, вызывает f3 еще до разрешения f2(). Но если я поставил предупреждение в done(), он работает нормально.

$.when(f1().f2()).done(alert ("came here");f3()); 

Выполняется в надлежащей последовательности.

То же самое с $ .when (f1, f2). Then() также. может кто-нибудь, пожалуйста, скажите мне, что может быть причиной этого необычного поведения.

ответ

1

.done() необходимо передать функцию ссылки вроде этого:

$.when(f1(),f2()).done(f3); 

Вы также должны запятой (а не период) между вашими двумя аргументами до $.when(), но я предполагаю, что это просто опечатка в вас r вопрос.

Когда вы сделали $.when(f1(),f2()).done(f3());, с f3 после скобок, что сразу же выполняет f3() и затем передается это возвращаемое значение .done(), который, скорее всего, что вы хотите нет.

+0

thnks @ jfriend00 ... вы могли бы также помочь мне в этом http://stackoverflow.com/questions/34808482/calling- a-function-having-callback-in-for-loop –

+0

@ N.Moudgil - я тоже ответил на этот вопрос. – jfriend00

-1

правильный синтаксис,

дать метод $.when() promise's.in код можно увидеть точку вместо запятой между двумя вызовами функций в $.when() методы.

правильный синтаксис

$.when(f1(), f2()).then() 

или

$.when(f1(), f2()).done() 
+0

Спасибо @sundar здесь, когда задаю вопрос. Я ошибся, но в моем коде я использую «,» только-- $ .when (f1(), f2()). Done(); –

+0

@ N.Moudgil нет такой возможности, как это. Как вы говорите, done() вызывает перед f2()? – sundar

+0

из вашего кода, что я вижу, вы разрешаете все обещания (обещают внутри функции f1 и f2) до того, как обещание возвращается из f1() и f2(). Добавьте консоль.log в три метода f1, f2 и выполните .check поток – sundar