мой код одновременно создает два вызова ajax (я предполагаю, что parallelism будет более эффективным). Я хочу загрузить таблицу, если оба вызова успешны. Каков правильный способ сделать это?
Extjs: два параллельных вызова ajax
Ответ 1
var succeeded = {};
function callBackOne(){
succeeded.one = true;
// your other stuff
if (succeeded.two) { bothHaveSucceeded());
}
function callBackTwo(){
succeeded.two = true;
// your other stuff
if (succeeded.one) { bothHaveSucceeded());
}
Ответ 2
Я лично использовал бы задержанную задачу:
var success = {
one: false,
two: false
};
// Task
var task = new Ext.util.DelayedTask(function(){
// Check for success
if (success.one && success.two) {
// Callback
doCallback();
} else {
task.delay(500);
}
});
task.delay(500);
// First
Ext.Ajax.request({
...
success: function() {
success.one = true;
}
...
});
// Second
Ext.Ajax.request({
...
success: function() {
success.two = true;
}
...
});
Задача acts
как поток и будет проверять состояние запросов и sleep
на каждые 500 мс, пока они оба не завершатся.
Ответ 3
Старый вопрос, но ну, как я наткнулся на него...
Я бы использовал превосходную асинхронную библиотеку Caolan, особенно здесь вы захотите использовать async.parallel.
Примеры, написанные в документе GitHub, заслуживают внимания.
Ответ 4
Поделитесь целочисленной переменной, которая проверяет каждый обратный вызов:
// count variable
var numReturns = 0;
// same call back used for each Ajax request:
function callback() {
numReturns++;
if (numReturns === 2) {
progress();
}
}
Если вам нужны разные обратные вызовы, каждый обратный вызов запускает событие, которое делает то же самое.