【发布时间】:2020-01-25 18:00:19
【问题描述】:
我只是 JavaScript Promises 的初学者,尽管我在生活中广泛使用了它们,用于 AJAX 请求。
我正在构建一个从 SharePoint 库运行的前端应用程序,它从 SharePoint API 请求用户信息以自定义页面内容。为了获得我想要的所有信息,我需要获取 2 个不同的 URL,因为其中一个不包含我寻找的所有数据。
此外,我正在构建一个库来促进 SharePoint API 的使用,我希望这两个承诺能够在一个单一的承诺中得到解决,结果都已经合并到一个单一的 JSON userData 中。我知道Promise.all() 做了类似的事情,但是它的结果是一个具有单独结果的数组,这不符合我想要的第二部分......
另外,请记住,我正在构建一个与 IE 完全兼容的应用程序,因此放弃了很多资源,例如 Asyn/Await。
所以我希望下面的函数getUser() 已经返回带有合并对象属性的承诺:
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);
});
【问题讨论】:
-
好的,那么问题到底出在哪里?你什么都没问,也没有提到代码是如何失败的。你是在问如何把数组变成
getUser里面的一个对象? -
如果这是您的要求,您可以添加
.then(): jsfiddle.net/khrismuc/Lje73nuf -
我希望所有的 Promise 和合并都恢复到一个
Promise中,结果可以在.then()中使用。答案/解决方案已分享
标签: javascript internet-explorer ecmascript-6 promise ecmascript-5