Javascript-承诺保留为挂起状态
Javascript - Promises stay as pending
为什么我的承诺保持挂起状态,我该如何修复它?
var foundPeopleA = findPeopleA().then(function(result) {
var res = []
result.map(function(el) {
res.push(getProfileXML(el.sid));
});
return res
});
var foundPeopleB = findPeopleB().then(function(result) {
var res = []
result.map(function(el) {
res.push(getProfileXML(el.sid));
});
return res
})
return Promise.all([findPeopleA, findPeopleB]).then(function(results) {
console.log(results) //[ [ Promise { <pending> }, Promise { <pending> } ], [ Promise { <pending> }, Promise { <pending> } ] ]
})
然而,如果我将上述2个功能的主体更改为
var res
result.map(function(el) {
res = getProfileXML(el.sid);
});
return res
它们不会被挂起,我会得到结果的。
数组不是承诺。如果返回一个promise数组,then
将获得一个promises数组,就像返回任何其他非promise值一样。只有当您返回一个promise时,该promise才会在then
之前执行。您的foundPeopleA
和foundPeopleB
分别构建了一系列承诺;您需要将这些数组连接起来,并将它们传递给Promise.all
或等效的数组,以便执行它们。
问题是,您使用then
单独处理每个承诺的履行,而all
通过向其传递一个未解决的承诺数组来处理多个承诺的履行。它用所有这些的结果建立了一个新的承诺。只需使用:
Promise.all([findPeopleA(), findPeopleB()])
.then(function(responses) ...
尝试将数组分配给映射的结果。
var foundPeopleA = findPeopleA().then(function(result) {
var res = []
res = result.map(function(el) {
return getProfileXML(el.sid);
});
return res
});
或者,也许你可以兑现承诺?
var foundPeopleA = findPeopleA().then(function(result) {
var res = []
res = result.map(function(el) {
return getProfileXML(el.sid);
});
resolve(res);
});
无论哪种方式,我认为您都需要通过返回映射中的值来创建新的数组。
相关文章:
- JavaScript执行暂时挂起页面
- 是定义的操作系统睡眠/挂起期间setTimeout的行为
- Chrome浏览器“;挂起”;同时在循环中执行AJAX请求
- fullcalendar在删除导致浏览器挂起的多个事件时速度较慢
- 应用将图表转换为图像的jqplot代码时Chrome挂起
- 如何在不使用Internet Explorer的情况下从未挂起的HTML文件执行程序
- MongoDB collection.find()查询挂起
- 使用子字符串方法时应用程序挂起的原因
- 如何在AngularJS中取消挂起的请求
- 从node.js应用程序调用Mongoose Model.save()时挂起
- Chrome,Safari在从本地存储读取时挂起,而Firefox很好
- IE 10 挂起 XMLHttpRequest 6 分钟,然后响应请求(使用 AngularJS 实现 CRSF)
- React计时器挂起:00(状态未更新)
- 如何检查Promise是否处于挂起状态
- Javascript-承诺保留为挂起状态
- WinJS 句柄挂起状态
- AngularJS后续$http删除将保持挂起状态几分钟
- 如何在保留所有环境的情况下挂起节点REPL并在稍后阶段恢复
- 在Windows 8 html5的挂起状态事件处理程序中写入文本文件
- 如何调试后台/事件页面挂起状态