2013-07-06 3 views
0

У меня есть следующий отложенный объект:Dojo XHR цепочки

var base = xhr.get({ 
    url: config.baseUrl + base_query, 
    handleAs: "json", 
    load: function(result) { 
     widget.set('value', result); 
    }, 
    error: function(result) { 
    } 
}); 

Когда этот запрос GET завершено мне нужно выполнить второй запрос с URL, который используется результат первого base:

var d1 = base.then(
    function(result) { 
     xhr.get({ 
      url: config.baseUrl + result.id, 
      handleAs: "json", 
      load: function(result) { 
       widget.set('visibility', result); 
      }, 
      error: function(result) { 
      } 
     }) 
    }, 
    function(result) { 
    } 
); 

It работает отлично. Но как я могу сделать не один, а два или более запросов (например, d1) по результатам base? Можно ли комбинировать любые , d2, ..., dn в одном отложенном объекте и подключить его с помощью then до base?

ответ

3

Да, точно. Вы можете вызвать then бесконечное число раз на base:

var d1 = base.then(fn1), 
    d2 = base.then(fn2), 
    … 

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

var base = xhr.get({ 
    url: config.baseUrl + base_query, 
    handleAs: "json" 
}); 
base.then(widget.set.bind(widget, 'value')); 
// or: dojo.hitch(widget, widget.set, 'value') if you like that better 

var d1 = base.then(function(result) { 
    return xhr.get({ 
// ^^^^^^ 
      url: config.baseUrl + result.id, 
      handleAs: "json" 
    }); 
}); 
d1.then(widget.set.bind(widget, 'visibility')); 
Смежные вопросы