gpt4 book ai didi

javascript - promise 和周期

转载 作者:行者123 更新时间:2023-12-03 02:45:43 25 4
gpt4 key购买 nike

有一系列 promise ,在我需要从数据库获取他的组和构造函数名称之后,第一个从数据库获取用户的 ID这些可以是多份副本结果循环又循环。最终我只收到一个用户的对象

async(takeIds()
.then(ids => {
// console.log("ids", ids);
for (var i = 0; i < ids.length; i++) {
data.id = ids[i];
await (takeIdvk(ids[i])
.then(idm => {
data.idvk = idm;
takeIdg(data.id)
.then(res => {
takeNamesCycle(res, data)
.then(data => {
console.log("data", data);
})
.catch(err => {
console.log(err);
});
})
.catch(err => {
console.log(err);
});
})
.catch(err => {
console.log(err);
}));
}
})
.catch(function(err) {
console.log(err);
}));

函数 takeNamesCycle 因为它与其他函数不同(其余的都是对数据库的简单请求)

var takeNamesCycle = async(function(arr, obj) {
return new Promise((resolve, reject) => {
for (var i = 0; i < arr.length; i++) {
var idg = arr[i];
await (takeNames(arr[i])
.then(names => {
obj.idg[idg] = names;
})
.catch(err => {
console.log(err);
}));
}
resolve(obj);
});
});

可以简化这个吗?我将不胜感激

最佳答案

考虑使用真正的async/await语法,而不是带有async()await()的库功能。

const ids = await takeIds();
// console.log("ids", ids);
try {
for (var i = 0; i < ids.length; i++) {
data.id = ids[i];
const idem = await takeIdvk(ids[i]);
data.idvk = idm;
const res = await takeIdg(data.id);
console.log("data", await takeNamesCycle(res, data));
}
} catch(err) {
console.log(err);
}

并确保avoid the Promise constructor antipattern

async function takeNamesCycle(arr, obj) {
for (const idg of arr) {
const names = await takeNames(idg);
obj.idg[idg] = names;
}
return obj;
}

关于javascript - promise 和周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48103969/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com