3

有没有办法像这样处理多个 xhr 请求?一方面xhr,有一个内置的功能,但用于多个请求?

4

3 回答 3

6

一个dojo.xhr 返回一个dojo.Deferred,一个Deferred 是回调等的包装器。因此,在您的情况下,关键功能是 dojo.xhr({parameters})。然后(回调函数)

虽然我们经常希望通过民意调查和计数器的简单快捷方式来实现并行 XHR,但 Dojo 也有这一点,正如 Craig 告诉 DeferredList 的那样;

您将触发两次 XHR,每次调用都返回一个处理程序,参考那些。创建一个列表,将这些引用作为参数,收集在一个数组中。然后作为最后的接触,在列表上附加一个“then”调用,

var dXhr1 = dojo.xhrGet({ url: ... });
var dXhr2 = dojo.xhrGet({ url: ... });
var dList = new dojo.DeferredList([dXhr1, dXhr2]);
dList.then(function(arrayOfValues) { 
    var res = "Result: succes?+"arrayOfValues[0][0].toString()+":"+arrayOfValues[0][1]+", "+
    succes?+"arrayOfValues[1][0].toString()+":"+arrayOfValues[1][1]+";
console.log(res);
});

或链式

new dojo.DeferredList([
     dojo.xhrGet({ url: ... }),
     dojo.xhrGet({ url: ... })
]).then(function(res) { console.log(res); });
于 2012-07-04T16:33:45.520 回答
4

ADeferredList会做你需要的。

http://dojotoolkit.org/reference-guide/1.7/dojo/DeferredList.html

于 2012-07-04T14:08:52.930 回答
1

你不能用内部计数器触发一个回调函数吗?当该计数器达到 2 时,两个回调都已完成?

于 2012-07-04T14:06:47.577 回答