sách gpt4 ai đã đi

javascript - 等待对象内的 promise 解决

In lại 作者:行者123 更新时间:2023-11-30 11:12:19 26 4
mua khóa gpt4 Nike

我有一个以 promises 作为其值的对象。对象字段可以具有不同类型的值,例如函数、 promise 、字符串、数字或其他对象。如何实现等待对象中的所有 promise 都得到解决的函数?

const asyncFunction = () => {
return Promise.resolve("Resolved!")
}
const nonAsyncFunction = () => {
return "Resolved!"
}
const awaitObjectWithPromise = (obj) => {
// Returns a promise which waits for all
// the promises inside "obj" to be resolved.
}
let obj = {
key1: asyncFunction(),
key2: nonAsyncFunction(),
key3: "Some Value",
parent1: {
key1: asyncFunction(),
key2: nonAsyncFunction(),
key3: "Some Value"
}
}

awaitObjectWithPromise(obj).then((obj) => {
console.log(obj);
// Should output:
// {
// key1: "Resolved!",
// key2: "Resolved!",
// key3: "Some Value",
// parent1: {
// key1: "Resolved!",
// key2: "Resolved!",
// key3: "Some Value"
// }
// }
})

1 Câu trả lời

在接受的答案中,我对某些事情不满意:

  • 如果其中一个字段为 vô giá trị hoặc không xác định 则抛出错误;
  • 输入值不能是Promise;
  • 缺乏等待 Promises 的并行性;

为了解决这些问题,我更改了函数:

const promiseAll = async (obj) => {
if (obj && typeof obj.then == 'function') obj = await obj;
if (!obj || typeof obj != 'object') return obj;
const forWaiting = [];
Object.keys(obj).forEach(k => {
if (obj[k] && typeof obj[k].then == 'function') forWaiting.push(obj[k].then(res => obj[k] = res));
if (obj[k] && typeof obj[k] == 'object') forWaiting.push(promiseAll(obj[k]))
});
await Promise.all(forWaiting);
return obj;
}

也许对某些人来说,它会有用。

关于javascript - 等待对象内的 promise 解决,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53189292/

26 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com