我目前在某种程度上陷入了比赛状态,并且正在拔头发。本质上,我要查询一个API,将结果添加到数据库中,然后对返回/保存的数据进行处理。
我不是在问这个特定的问题,而是在询问如何解决这类问题的设计模式。 p.push(formatter.createAccounts(account, id));
行可能最多运行1000次,可能需要20秒左右的时间。
任何关于我做错事情的想法都会很有帮助
谢谢,
奥利
// get all users
Promise.all(updatedUsers)
.then(() => {
// create an array of promises
const p = [];
users.then((user) => {
...
ids.forEach((id) => {
const accounts = foo.getAccounts(id, true); // returns a promise
accounts.then((account) => {
// add the return data from here to the promise array at the bottom
p.push(formatter.createAccounts(account, id));
});
});
});
// this would ideally be a promise array of the data from above - but instead it just evaluates to [] (what it was set to).
Promise.all(p).then(() => {
// do my stuff that relies on the data here
})
});
最佳答案
问题是您没有将foo.getAccounts
诺言包含到诺言数组中。修改版本:
Promise.all(updatedUsers)
.then(() => {
users.then((user) => {
return Promise.all(ids.map(id => {
//for each ID we return a promise
return foo.getAccounts(id, true).then(account => {
//keep returning a promise
return formatter.createAccounts(account, id)
})
}).then((results) => {
//results is an array of the resolved values from formatter.createAccounts
// do my stuff that relies on the data here
})
})
//rest of closing brackets
关于javascript - promise 和种族条件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47516185/