我可以使用一些帮助来确定何时所有Javascript承诺都已解决。我正在遍历对象数组,对于每个对象,我都调用一个返回诺言的函数。每个承诺都分解为一个对象,我将这些对象合并在一起以创建一个大对象。当我知道这个大对象已经完成时,即当所有诺言都解决时,我想做些事情。我知道我应该能够使用Promise.all并传递我创建的诺言数组,但是我正在努力用代码来实现这一点。任何帮助您将不胜感激。这是我的代码:
let data = JSON.parse(body)
let compedObj = {}
for (let i=0;i<data.dock.length;i++) {
getDockData(data.dock[i].url, user_token)
.then (data => {
compedObj = {...compedObj, ...data}
})
}
function getDockData (url, token) {
return new Promise((resolve, reject)=>{
var options = {
url: url,
headers: {
'authorization': `bearer ${token}`,
'user-agent': /* my app details */
}
}
function callback(error, response, body) {
if (!error) {
let data = JSON.parse(body)
let obj = {}
switch(data.title) {
case "ToDos":
obj = {todos: data.todos_count};
break;
case "Messages":
obj = {messages: data.messages_count}
break;
}
resolve(obj)
} else {
reject("there was an error")
}
}
Request(options, callback);
});
}
答案 0 :(得分:1)
首先,您可以将数据映射到Promise的映射中,然后在解决后将它们简化为一个对象:
Promise.all(data.dock.map(({url}) => getDockData(url, user_token)))
.then(res => res.reduce((acc, curr) => ({...acc, ...curr}), {}))
.then(compedObj => /* do something with the result data */);