通过承诺从多个来源获取数据
Getting data from multiple sources with promises
我试图从一个或多个来源获取数据,所以我传递了一个url数组来获取数据并做出承诺。
然后我尝试使用Promise.all
以获得所有数据,但我根本没有得到任何东西。
我该如何解决这个问题?
var getData = function (urls) {
var promises = [];
$.each(urls, function (index, url) {
var promise = new Promise(function (resolve, reject) {
$.ajax({
type: 'get',
url: url,
dataType: 'json',
success: function (data) {
console.log(data);
}
});
});
promises.push(promise);
});
console.log(promises);
Promise.all(promises).then(function () {
console.log('Complete');
});
};
可以在数组下使用push响应,并在done()
上使用
var xhr_request=[];
var responses=[];
$.each(urls, function (index, url) {
// you can push any aysnc method handler
xhr_request.push($.ajax({
url: url,
type:'get',
dataType:'json',
data:{user_name: users[i]},
success: function(data){
console.log('success of ajax response')
responses.push(data);
}
}));
});
$.when.apply(null, xhr_request).done( function(){
// all done
console.log('all request completed')
console.log(responses);
});
美元。when提供了一种基于零个或多个对象(通常是表示异步事件的Deferred对象)执行回调函数的方法。
$。Apply将数组元素转换为函数
中的不同参数$。完成是调用函数后,所有异步。请求已完成
这是我编写代码的方式(有点,因为我通常不使用jQuery,我有点撒谎)
var getData = function (urls) {
Promise.all($.map(urls, function (index, url) {
return $.ajax({
type: 'get',
url: url,
dataType: 'json'
});
})).then(function (responses) {
console.log('Complete');
console.log(responses); // responses in an array
});
};
$.ajax
返回一个promise,不需要在promise构造函数中包装它
使用$.map
而不是$.each
并返回jquery承诺-允许您将整个$.map
包装为Promise.all
参数
我不明白的是为什么你说你没有得到"任何东西"——即使你的代码不太正确,它仍然应该踢开$。并给出控制台输出
代替
var promise = new Promise(function (resolve, reject) {
$.ajax({
type: 'get',
url: url,
dataType: 'json',
success: function (data) {
console.log(data);
}
});
});
你为什么不直接
var promise =
$.ajax({
type: 'get',
url: url,
dataType: 'json',
success: function (data) {
console.log(data);
}
});
你已经通过你的$.ajax
返回了一个承诺。所以你不需要在另一个Promise中包装它
相关文章:
- Ajax-如何获取数据
- 从键值结构中获取数据,并将其与AngularJS中ng重复的值进行比较
- 从数据库中获取数据并插入JavaScript变量
- 从单击的行上的列中获取数据
- Solr查询以按日期月份获取数据&年
- React路由器服务器端渲染和ajax获取数据
- 使用JavaScript在IE9中获取数据列表选项
- 从json子数组获取数据
- 使用angularjs中的rest调用通过id获取数据
- 正在从ruby应用程序中的数据库中获取数据
- 如何从servlet获取数据到ajax成功
- 从选择下拉菜单中获取数据
- 异步获取数据使用JavaScript同步获取数据
- 从服务器获取数据并在选择控件中使用ng选项无法显示选项
- 如何在Angular.js中循环动态添加Fields并获取数据并将其发送到服务器
- JavaScript-获取数据属性的值返回未定义的值
- 如何从文本区域获取数据并使用javascript进行解密
- 在put方法之前从作用域获取数据
- 事件循环的MEAN.JS setInterval进程(从另一个服务器获取数据)
- 使用ReactJS和Flux架构从服务器获取数据的正确方法是什么