解决多个承诺返回合并的数据

时间:2019-09-25 13:59:49

标签: javascript internet-explorer ecmascript-6 promise ecmascript-5

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

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

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

另外,请记住,我正在构建一个与IE完全兼容的应用程序,因此像Asyn / Await这样的许多资源都被丢弃了。

所以我希望下面的功能getUser()已经返回带有合并对象属性的Promise:

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);
});

1 个答案:

答案 0 :(得分:0)

我明白了!我了解了promise的工作方式并自己找到了解决方案:我需要做的就是将步骤封装成一个新的promise,并在resolve()被解决并且合并以{{1 }}:

Promise.all()