javascript - 解决多个返回合并数据的 Promise
问题描述
我只是JavaScript Promises的初学者,尽管我在生活中广泛使用了它们,包括 AJAX 请求。
我正在构建一个从 SharePoint 库运行的前端应用程序,它从 SharePoint API 请求用户信息以自定义页面内容。为了获得我想要的所有信息,我需要获取 2 个不同的 URL,因为其中一个不包含我寻找的所有数据。
此外,我正在构建一个库来促进 SharePoint API 的使用,我希望这两个承诺能够在一个单一的承诺中得到解决,结果都已经合并到一个 JSONuserData
中。我知道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);
});
解决方案
我得到了它!我理解了 Promise 的工作方式并自己找到了解决方案:我所需要的只是将这些步骤封装到一个新的 Promise 中,并在解决后调用resolve()
回调Promise.all()
,合并以Object.assign()
:
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);
});
});
}
推荐阅读
- java - Executor线程池的使用
- git - TFS Git | 一个根文件夹下的多个 git 存储库
- java - 静态初始化程序中的 System.out.println 显然输出两次
- javascript - 如何在参数中提供默认值?
- search - 如何用 Solr 搜索汉字?
- linux - 如何将数据保存到设备文件?
- python - 正则表达式在句子中查找名称
- deep-linking - 使用 branch.io 创建 Facebook 应用程序链接
- php - 从输入多维数组返回聚合数组
- amazon-web-services - 混合设置中的 Kubernetes 集群自动缩放器