2013-03-22 5 views
2

У меня возникли проблемы, чтобы выполнить следующую задачу. У меня есть три функцииДождитесь появления ajax для отображения результата

function f1(param1) { 
    var d = $.deferred(); 
    // ajax call with data param1 
    d.resolve(res0, res1); 
    return d.promise(); 
} 
function f2(param2) { 
    var d = $.deferred(); 
    // ajax call with data param2 
    d.resolve(res2); 
    return d.promise(); 
} 

function f3(param3) { 
    var d = $.deferred(); 
    // ajax call with data param3 
    d.resolve(res3); 
    return d.promise(); 
} 

Я бегу их так:

$.when(f1(param1),f2(pram2),f3(param3)).done(function(res,res2,res3){ 

}); 

Мое требование:

если res2 пустой прогон f2(res[1]). когда-то сделали дисплей res[0] + f2(res[1]) + res3

еще дисплей res[0] + res2 + res3

Есть ли тот, кто может помочь мне с этим с помощью JQuery/обещаниям?

Спасибо

ответ

1

Если я вас правильно понял, res и res3 независимы друг от друга, но res2может зависеть от res[1], если вызов начальной к f2 производится пустой результат.

Если это произошло, вам необходимо позвонить по телефону f2.

Итак:

$.when(f1(p1), f2(p2), f3(p3)).then(function(res, res2, res3) { 
    if (!res2) {    // substitute appropriate "empty" test 
     res2 = f2(res[1]); // call f2 again, getting a new promise 
    } 
    return $.when(res, res2, res3); // create new compound promise 
}).done(function(res, res2, res3) { 
    // do your stuff 
}); 

Идея заключается в том, что внутренний вызов $.when() будет автоматически решить, если res, res2 и res3 уже «нормальные» возвращаемые значения, но если res2 заменяется на новый promise$.when вызов будет ждать , что будет разрешено перед продолжением.

+0

благодарим вас за ответ. в строке «return $ .when (res, res2, res3)» вы имеете в виду хорошо $ .when (f1 (p1), res2, f3 (p3)). Если это так, я думаю, что я отправлю еще один вызов ajax, чтобы получить результат, который у меня уже есть: res [0] и res [3]. res [0] и res3 готовы к отображению, которые не зависят ни от чего. Это только res2, который зависит от res [1] –

+0

@ Bes-mM-bes нет, эта линия означает именно то, что я сказал. Когда вы передаете что-то, что не является обещанием «$ .when», оно неявно считается «разрешенным», поэтому передача '(res, prom, res3)' будет только ждать, когда среднее значение будет (повторно) разрешено - другое параметры будут переданы на вызов '.done' как нормальные значения. – Alnitak

+0

Отлично! Оно работает. Спасибо. –

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