JS Promise:请求数组
JS Promise: Array of requests
我有一组 peoplePickers(用户可以从员工目录中选择人员的组件)。我遍历它们并发出一系列请求以从目录中获取信息(异步,returns 承诺)。然后我想将选择器名称作为键添加到 userIds 对象(不是故意的数组!),并将来自服务器的信息作为值。登录控制台时,userIds始终为空
var userIds = {};
var requests = [];
peoplePickers.forEach(function (picker) {
var infos = ...;
requests.push(getUserInfosFromDirectory(infos).then(function (userInfos) {
userIds[picker] = userInfos.Id;
}));
});
$.when.apply($, requests).then(function () {
console.log(userIds);
});
调用的函数
function getUserInfosFromDirectory(loginName){
...
return $.ajax({
url: ...,
type: "POST",
contentType: "application/json;odata=verbose",
data: loginName,
headers: {
"X-RequestDigest": $("#__REQUESTDIGEST").val(),
"accept": "application/json;odata=verbose"
}
}).then(function (data) {
return data.userInfos
});
}
我最终在应用函数的回调中使用了 return 值。因为请求是异步的,迭代的索引在结果可用之前发生了变化。
$.when.apply($, requests).then(function () {
var userIds = {};
$.each(arguments, function (i, arg) {
var val = arg[0];
if (!val) {
userIds[peoplePickers[i]] = null;
} else {
userIds[peoplePickers[i]] = val.Id;
}
});
});
我有一组 peoplePickers(用户可以从员工目录中选择人员的组件)。我遍历它们并发出一系列请求以从目录中获取信息(异步,returns 承诺)。然后我想将选择器名称作为键添加到 userIds 对象(不是故意的数组!),并将来自服务器的信息作为值。登录控制台时,userIds始终为空
var userIds = {};
var requests = [];
peoplePickers.forEach(function (picker) {
var infos = ...;
requests.push(getUserInfosFromDirectory(infos).then(function (userInfos) {
userIds[picker] = userInfos.Id;
}));
});
$.when.apply($, requests).then(function () {
console.log(userIds);
});
调用的函数
function getUserInfosFromDirectory(loginName){
...
return $.ajax({
url: ...,
type: "POST",
contentType: "application/json;odata=verbose",
data: loginName,
headers: {
"X-RequestDigest": $("#__REQUESTDIGEST").val(),
"accept": "application/json;odata=verbose"
}
}).then(function (data) {
return data.userInfos
});
}
我最终在应用函数的回调中使用了 return 值。因为请求是异步的,迭代的索引在结果可用之前发生了变化。
$.when.apply($, requests).then(function () {
var userIds = {};
$.each(arguments, function (i, arg) {
var val = arg[0];
if (!val) {
userIds[peoplePickers[i]] = null;
} else {
userIds[peoplePickers[i]] = val.Id;
}
});
});