基本上,我试图等待过滤器循环的每次迭代,以仅获取record,newAnalyte和userId的对象属性,所有这些属性都需要等待的异步方法,这些方法需要一些时间来处理数据。
其他对象属性是从另一个过滤器循环的迭代派生而来的,因此,我需要等待外部循环+内部循环的每次迭代完成以获取完整的数据对象。
问题是,我从已完成的承诺中得到的是完整循环中的对象数组,而不是每次循环迭代中的每个对象。
我期望的是类似[Object]的东西,相反我得到了[[Object],[Object],[Object]等]。
odbc.connect();
const results = reqs.filter(async (item , k) => {
if (k % 2 == 0) {
const newAnalyte = item['Analyte Peak Name'].split(' ')[0].toUpperCase();
const validRow = await odbc.findBatch(req, type, batchId, newAnalyte, seq).catch((e) => console.log(e));
if (validRow.length > 0) {
let suffix = "";
if (reqsuffix.length != 0) {
suffix = reqsuffix[l]['Sample Name'].slice(-4);
}
const dbUser = await sqlCreateBatch.checkUser(user).catch((e) => console.log(e));
const record = await odbc.processAnalyte(item, reqs[k+1], type, req, suffix);
return ({
analyte: newAnalyte,
req: req,
type: type,
batchId: batchId,
seq: seq,
record: record,
record1: item,
record2: reqs[k+1],
userId: dbUser.row_id,
rowId: rowId,
fileId: fileId,
user: user,
file: file
});
}
}
});
Promise.all(results).then((completed) => {
console.log("results");
return completed;
});
答案 0 :(得分:0)
在这种情况下,filter
将始终收到诺言,这是真实的价值观。选项是使用Promise.all
,然后按索引过滤。使用for of
。
Promise.all(reqs.map(async (item, k) => {
// make your requests
// return true or false
})).then((results) => {
const filteredReqs = reqs.filter((item, index) => results[index]);
});
更新:
有点误解了您的代码,您需要将filter
替换为map
。然后在Promise.all(results).then(....)