I have this code:
// _arrOfUsers = array of objects, each object represents a user.
//For example, a single object may be something like {name:"mike", id:"123"}
var _successUsers = function (_arrOfUsers) {
var promises = []; //empty array of promises
_arrOfUsers.forEach(function (user) {
promises.push(function () {
return $.Deferred(function (dfd) {
$.post("//sessionID",
queryServ.getAllUserDomainCommentsFunc("//currentDomainID", user.iD, "//currentDomainID", "//currentURL"),
'text', 'text/plain', this,
function (dataX) {
dfd.resolve(dataX);
});
}).promise();
});
});
$.when(promises).then(function (results) {
console.log(results);
});
};
理解这段代码的一些要素:
**** Ajax调用设置
- url: sessionURL
- data: 发送到服务器的数据是一个对模块queryServ.js的外部调用,调用函数为getAllUserDomainCommentsFunct,它返回一个JSON对象。 它需要这些参数才能工作:currentDomain,userID,currentDomain(再次),currentURL
- type: text
- contentType: text/plain
- context: this
**** 评论是一个类似于jsonObject的对象 {id: "998", textOfcomment:"I commented this", target: "//targetID"}.
我想做的是为数组“_arrOfUsers”中的每个用户都进行一次ajax调用,从服务器提取他的所有评论;在完成所有“提取”操作之后,我需要获取所有结果(即来自所有用户的所有评论)并在控制台中打印出来。 对于我的代码,顺序非常重要,这就是为什么我在使用Promises的原因。
我在StackOverflow上的JSfiddle中找到了此算法的结构,但是它对我没有用,因为它返回一个函数数组,我无法理解为什么,可能是因为我在职业生涯中从未使用过Promise。
如果有不清楚的地方,请随时告诉我。谢谢。
$.post()
,你必须将它们放入一个对象中并传递该对象。 - jfriend00