解决返回合并数据的多个 Promise

Resolve multiple Promises returning merged data

我只是 JavaScript Promises 的初学者,尽管我在生活中广泛使用它们,有 AJAX 个请求。

我正在为 SharePoint 库 运行 构建一个前端应用程序,它从 SharePoint API 请求用户信息以自定义页面内容。为了获得我想要的所有信息,我需要获取 2 个不同的 URL,因为一个不包含我寻找的所有数据。

此外,我正在构建一个库来促进 SharePoint 的使用 API,我希望这 2 个承诺在一个单一的承诺中得到解决,两者的结果已经合并为一个 JSON userData。我知道 Promise.all() 做了类似的事情,但是它的结果是一个带有单独结果的数组,不符合我想要的第二部分...

此外,请记住,我正在构建一个与 IE 完全兼容的应用程序,因此丢弃了很多资源,例如 Asyn/Await。

所以我希望下面的函数 getUser() 已经 return 具有合并对象属性的承诺:

function getUser() {
    var userData1 = axios.get(url + '/web/CurrentUser');
    var userData2 = axios.get(url + '/SP.UserProfiles.PeopleManager/GetMyProperties');

    return Promise.all([userData1, userData2]);
}

var userDataAll;
getUser().then(function(values) {
    userDataAll = Object.assign({}, values[0].data, values[1].data);
});

我明白了!我了解 promises 的工作方式并自己找到了解决方案:我所需要的只是将步骤封装到一个新的 promise 中,并在 Promise.all() 得到解决并且合并以 [=13 结束时调用 resolve() 回调=]:

function getUser() {
    return new Promise(function(resolve, reject) {
        var userData1 = axios.get(url + '/web/CurrentUser');
        var userData2 = axios.get(url + '/SP.UserProfiles.PeopleManager/GetMyProperties');
        Promise
            .all([userData1, userData2])
            .then(function(results) {
                let userData = Object.assign({}, results[0].data, results[1].data);
                resolve(userData);
            })
            .catch(function(errors) {
                reject(errors);
            });
    });
}