我需要通过解析基于另一个数组构建的 promise 数组来构建对象数组。
假设我有一组 letters = ['a', 'b', 'c']
。然后,我将其映射为使用每个字母作为参数进行 Ajax 调用,如下所示:
var result = letters.map(function (letter) {
return $.getJSON('myuri', { param: letter });
};
结果,我得到了一个带有 ajax promise 的数组。然后我这样解决:
Promise.all(result).then(function (response) {
console.log(response);
});
日志正在打印每个 ajax 调用的原始响应。在那之前一切正常。但我不想要原始响应,我想要自定义对象,所以我尝试使用 Ajax 的成功回调来创建它们,如下所示:
var letters = ['a', 'b', 'c'];
var result = letters.map(function (letter) {
return $.getJSON('myuri', { param: letter })
// Chaining with success callback
.done(function (response) {
return {
'custom_attr': response.x,
'athor_custom_attr': response.y
};
});
});
Promise.all(result).then(function (response) {
console.log(response);
});
问题是成功回调不会干扰数组的创建。事实上,我可以在回调中将返回更改为 ANYTHING,这没有任何区别,代码仍然返回原始响应的数组。
当我使用 $http
服务对 Angular 执行此操作时,它运行良好,但使用 $.getJSON
对 JQuery 执行此操作时不起作用,我不明白为什么这正在发生。
提前谢谢大家。
最佳答案
您的回调返回值被忽略,因为您已经使用了done
。你真正想要的是使用 then
它为回调的结果创建了一个新的 promise :
var result = letters.map(function (letter) {
return $.getJSON('myuri', { param: letter })
.then(function (response) {
return {
'custom_attr': response.x,
'athor_custom_attr': response.y
};
});
});
done
方法不可链接!几乎没有理由在 then
上使用它。
关于javascript - 构建 Ajax 调用数组时,JQuery Ajax 成功回调不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36412248/